@@ -1538,6 +1538,31 @@ def testSetSockOpt(self):
15381538 reuse = sock .getsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR )
15391539 self .assertFalse (reuse == 0 , "failed to set reuse mode" )
15401540
1541+ @unittest .skipIf (_testcapi is None , "requires _testcapi" )
1542+ def test_setsockopt_errors (self ):
1543+ # See issue #107546.
1544+ from _testcapi import INT_MAX , INT_MIN
1545+
1546+ sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
1547+ self .addCleanup (sock .close )
1548+
1549+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 ) # No error expected.
1550+
1551+ with self .assertRaises (OverflowError ):
1552+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , INT_MAX + 1 )
1553+
1554+ with self .assertRaises (OverflowError ):
1555+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , INT_MIN - 1 )
1556+
1557+ with self .assertRaises (OverflowError ):
1558+ sock .setsockopt (socket .SOL_SOCKET , INT_MAX + 1 , 1 )
1559+
1560+ with self .assertRaises (OverflowError ):
1561+ sock .setsockopt (INT_MAX + 1 , socket .SO_REUSEADDR , 1 )
1562+
1563+ with self .assertRaises (TypeError ):
1564+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , dict ())
1565+
15411566 def testSendAfterClose (self ):
15421567 # testing send() after close() with timeout
15431568 with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as sock :
0 commit comments