這是我的代碼,它可以運行CentOS和Windows只是修復一些頭。如何找到已經在使用的地址?
#define _WIN32_WINNT 0x0501
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
/*
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
*/
int main()
{
int sock;
int ret = 0;
int port= 12345;
struct sockaddr_in addr;
char buf[1024];
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock<0){
printf("socket() ret = %d : %s\n",ret,strerror(errno));
return ret;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = INADDR_ANY;
ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
if(ret<0){
printf("bind() ret = %d errno =%d : %s\n",ret,errno,strerror(errno));
return ret;
}
printf("############# Binding port %d type Enter to stop \t",port);
fgets(buf,sizeof(buf),stdin);
return 0;
}
當我試圖通過這個節目與乳寧拖進程綁定同一個端口,就必須有一個已經解決使用類似下面的消息。
[第一PROC @ CENTOS]
$ ./udp
############# Binding port 12345 type Enter to stop
[第二PROC @ CENTOS]
$ ./udp
bind() ret = -1 errno =98 : Address already in use
$
然而,當我做同樣的事情上窗口相同的代碼,消息是不同的。
[第一PROC @窗口]
C:\ >udp
############# Binding port 12345 type Enter to stop
[第二PROC @窗口]
C:\ >udp
bind() ret = -1 errno =34 : Result too large
C:\ >
我怎麼能在Windows上使用獲取地址了嗎?