@@ -1655,6 +1655,30 @@ def test_getaddrinfo_int_port_overflow(self):
16551655 socket .getaddrinfo (None , 0 , type = socket .SOCK_STREAM ) # No error expected.
16561656 socket .getaddrinfo (None , 0xffff , type = socket .SOCK_STREAM ) # No error expected.
16571657
1658+ def test_setsockopt_errors (self ):
1659+ # See issue #107546.
1660+ from _testcapi import INT_MAX , INT_MIN
1661+
1662+ sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
1663+ self .addCleanup (sock .close )
1664+
1665+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , 1 ) # No error expected.
1666+
1667+ with self .assertRaises (OverflowError ):
1668+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , INT_MAX + 1 )
1669+
1670+ with self .assertRaises (OverflowError ):
1671+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , INT_MIN - 1 )
1672+
1673+ with self .assertRaises (OverflowError ):
1674+ sock .setsockopt (socket .SOL_SOCKET , INT_MAX + 1 , 1 )
1675+
1676+ with self .assertRaises (OverflowError ):
1677+ sock .setsockopt (INT_MAX + 1 , socket .SO_REUSEADDR , 1 )
1678+
1679+ with self .assertRaises (TypeError ):
1680+ sock .setsockopt (socket .SOL_SOCKET , socket .SO_REUSEADDR , dict ())
1681+
16581682 def test_getnameinfo (self ):
16591683 # only IP addresses are allowed
16601684 self .assertRaises (OSError , socket .getnameinfo , ('mail.python.org' ,0 ), 0 )
0 commit comments