winsock不支持读/写
使用一个小的测试程序(在Linux上使用mingw编译),我注意到不能使用Winsock2的socket
调用实现获得的socket fd上的write
调用。 写调用返回<0并设置errno = EBADF。
想想从xinetd运行的程序,减去他们的stdin / stdout始终是套接字的假设。 (例如,某些程序会调用getpeername,如果它不是套接字,则会失败,随后它们可能会过早退出。)
那么,除了对fd进行假设之外,如何在/ windin / stdout中读取/写入的{文件描述符类型} – 不可知程序应该合理地在win32环境中工作?
或者更简单地说,是否有一些魔术函数调用要用win32(well,mingw) write
实现来连接Winsock2套接字fds?
如果你想在Windows上有任何理智的行为,请忘记mingw。 它使用MSVC ++标准库,它甚至无法符合普通的C标准,更不用说POSIX了。 可悲的是,cygwin有点臃肿,但我只是接受膨胀作为Windows编程的代价并与cygwin一起使用。 或者你可以编写你编写的每个程序的2个不同版本,可能与#ifdef
s纠缠在一起,以支持MSVC和POSIX ……
read()
和write()
函数是POSIX I / O系统调用,而不是套接字API调用。
MinGW用于编译本机Windows平台。 它不提供POSIX环境。
将MinGW与Winsock一起使用时,您有两种选择:
- 使用套接字API调用
send()
和recv()
。 - 使用Windows I / O系统调用
WriteFile()
和ReadFile()
。
Windows上的套接字句柄不是文件句柄。 您必须使用Winsock函数来读/写/更改状态。
你也不能在Windows中使用select
或者其他类型的句柄。