| Anonymous | Login | Signup for a new account | 2013-05-20 18:47 CEST | ![]() |
| Main | My View | View Issues | Change Log | Roadmap |
| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | |||||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | |||||||
| 0005416 | OCaml | OCaml general | public | 2011-12-08 14:11 | 2012-02-27 18:14 | |||||||
| Reporter | ripoche | |||||||||||
| Assigned To | ||||||||||||
| Priority | normal | Severity | major | Reproducibility | always | |||||||
| Status | resolved | Resolution | fixed | |||||||||
| Platform | PC | OS | Windows | OS Version | XP SP3 32 bits | |||||||
| Product Version | 3.12.1 | |||||||||||
| Target Version | Fixed in Version | |||||||||||
| Summary | 0005416: Unix.(set|clear)_close_on_exec changes sockets to blocking mode | |||||||||||
| Description | Consider the following snippet: let () = let server = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in Unix.set_nonblock server; Unix.set_close_on_exec server; Unix.setsockopt server Unix.SO_REUSEADDR true; Unix.bind server (Unix.ADDR_INET (Unix.inet_addr_any, 1039)); Unix.listen server 10; output_string stdout "calling Unix.accept on non-blocking socket\n"; flush stdout; ignore (Unix.accept server) ;; On Linux 32 bits, the call to accept fails as expected with EAGAIN (EWOULDBLOCK would be fine too). On WinXP SP3 32 bits, the call to accept blocks. This issue lies in the Win32 implementation of Unix.(set|clear)_close_on_exec. otherlibs/win32unix/close_on.c uses DuplicateHandle which has the (undocumented) side-effect of resetting sockets to blocking mode. Note that this trick is from the Win9x era and should probably be replaced by a call to SetHandleInformation. As a side note, I also noticed the usage of both WinSock and WinSock2 in win32unix. Can I ask what's the point of mixing both ? Do we really need to support Win9X ? | |||||||||||
| Tags | No tags attached. | |||||||||||
| Attached Files | ||||||||||||
Relationships |
||||||
|
||||||
Notes |
|
|
(0006399) xleroy (administrator) 2011-12-20 10:01 |
Patch applied in SVN trunk, commit 11888. Re: "what's the point of mixing WinSock and WinSock2?", it's probably historical baggage. I don't know what it would imply to switch entirely to WinSock2 (how many changes? what benefits?). If you have suggestions on this topic, feel free to open another PR with them. |
Issue History |
|||
| Date Modified | Username | Field | Change |
| 2011-12-08 14:11 | ripoche | New Issue | |
| 2011-12-08 14:43 | ripoche | File Added: ocaml-3.12.1.close_on.patch | |
| 2011-12-20 10:01 | xleroy | Note Added: 0006399 | |
| 2011-12-20 10:01 | xleroy | Status | new => resolved |
| 2011-12-20 10:01 | xleroy | Resolution | open => fixed |
| 2012-02-27 18:14 | xleroy | Relationship added | related to 0004895 |
| Copyright © 2000 - 2011 MantisBT Group |