Revamp server's Windows POSIX compatibility code
Unlike POSIX sockets, Windows sockets are not file descriptors, but "OS handles", with a completely separate set of functions. However, Windows can create a file descriptor for a socket, and return a file descriptor's underlying handle. Use that instead of wrapping our own file descriptors around Windows file descriptors and sockets. Remove the wrapping machinery: MAX_FDS, enum fdmap_io_type, struct fdmap, fdmap[], nfd, get_fd(), free_fd(), set_fd(), lookup_handle(), lookup_fd(). Rewrite SOCKET_FUNCTION(), posix_accept(), posix_socket(), posix_close(), ftruncate(), posix_open(), posix_read(), posix_write(), fcntl(). Remove FILE_FUNCTION(), posix_fstat(), posix_lseek(), SHARED_FUNCTION(), and fileno(), because the system's functions now work fine. posix_fsync() is used only #ifdef _WIN32, remove it, and call _commit() directly. The old code stuffed WSA error codes into errno, which doesn't work. Use new w32_set_winsock_errno() to retrieve, convert & stuff into errno. Adapt inet_ntop() to set the WSA error code instead of errno, so it can use w32_set_winsock_errno(). Move EWOULDBLOCK from sys/socket.h to w32misc.h, and drop unused ENOTSOCK, EAFNOSUPPORT. Use SOCKET rather than int in Windows-specific code.
This commit is contained in:
parent
798af5b45b
commit
1c08ccf25b
6 changed files with 156 additions and 397 deletions
|
@ -324,7 +324,7 @@ gen_power(struct powstr *powbuf, int save)
|
|||
* write(), they delay it until the write actually hits the disk.
|
||||
* Bad, because `power' displays that time. Force it.
|
||||
*/
|
||||
fsync(empfile[EF_POWER].fd);
|
||||
_commit(empfile[EF_POWER].fd);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue