【发布时间】:2011-09-21 14:49:59
【问题描述】:
在 unix 上 everything is a file 函数 read()、write()、close() 在 Win32 上不受支持。
我想模仿它,但不知道如何区分 sock 在 WinSocks2 上是 socket 还是 fd。
//returns 1 if `sock` is network socket,
// 0 if `sock` is file desriptor (including stdio, stderr, stdout), ...
// -1 in none of above
int is_net_socket(int sock)
{
// ...?
}
这应该像这样工作:
int mysock = socket(PF_INET, SOCK_STREAM, 0);
int myfd = _open("my_file.txt", _O_RDONLY);
printf("1: %d 2: %d 3: %d 4:%d\n",
is_net_socket(mysock), //1
is_net_socket(myfd), //0
is_net_socket(stdin), //0
is_net_socket(stderr)); //0
// should print "1: 1 2: 0 3: 0 4:0"
如何实现is_net_socket 以便在以下情况下使用它:
int my_close(int sock)
{
#if ON_WINDOWS
switch( is_net_socket(sock) ) {
case 1: return closesocket(sock);
case 0: return _close(sock);
default: //handle error...
}
#else
return close(sock);
#endif
}
【问题讨论】:
标签: c windows sockets winsock winsock2