@@ -1655,6 +1655,30 @@ def test_getaddrinfo_int_port_overflow(self):
1655
1655
socket .getaddrinfo (None , 0 , type = socket .SOCK_STREAM ) # No error expected.
1656
1656
socket .getaddrinfo (None , 0xffff , type = socket .SOCK_STREAM ) # No error expected.
1657
1657
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
+
1658
1682
def test_getnameinfo (self ):
1659
1683
# only IP addresses are allowed
1660
1684
self .assertRaises (OSError , socket .getnameinfo , ('mail.python.org' ,0 ), 0 )
0 commit comments