recvfrom()超时c编程

recvfrom()超时c编程,c,sockets,timeout,recvfrom,C,Sockets,Timeout,Recvfrom,我无法将超时设置为recvfrom()。我在Cygwin64环境下运行代码 .他的是我代码中的一个示例: if(( clientSock=socket(AF_INET, SOCK_DGRAM,0))==-1){ // creat client socket perror("Socket Initialisation Error\n"); }//if struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; if (setsockopt(cli

我无法将超时设置为
recvfrom()
。我在Cygwin64环境下运行代码

.他的是我代码中的一个示例:

if(( clientSock=socket(AF_INET, SOCK_DGRAM,0))==-1){ // creat client socket 
    perror("Socket Initialisation Error\n");
}//if

struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
if (setsockopt(clientSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof tv)) {
    perror("setsockopt");    
}

memset(&client,0, sizeof(client)); // clear the memory of 
client addrinfo

client.sin_port=htons(clientPort);// asign client port
client.sin_family=AF_INET; // ipv4
client.sin_addr.s_addr=INADDR_ANY;
bzero(&client.sin_zero,8);

if((bind(clientSock,(struct sockaddr*)&client, sizeof(struct sockaddr_in)))==-1){ // bind socket with addrinfo
    perror("\n Bind: ");
} 

server.sin_family=AF_INET; // server ipv4 type
server.sin_port=htons(serverPort); // assign server port
server.sin_addr.s_addr=inet_addr(serverIp); // asign server ip
bzero(&server.sin_zero,8);

while(1){
    // send to the server is ok then  wait for receive: 

    if((recvfrom(clientSock,&rcvPkt,sizeof(struct packet),0,(struct sockaddr *)&server,&sockLength))<0){ // wait for receiving replay from server 
        puts("\nerror in receiving CONF packet");
    }
    sleep(1);
}
if((clientSock=socket(AF_INET,SOCK_DGRAM,0))=-1{//create client socket
perror(“套接字初始化错误\n”);
}//如果
结构时间值电视;
tv.tv_sec=1;
tv.tv_usec=0;
if(setsockopt(clientSock,SOL_SOCKET,SO_RCVTIMEO,(char*)和tv,tv的大小)){
perror(“setsockopt”);
}
memset(&client,0,sizeof(client));//清除记忆
客户端地址信息
client.sin_port=htons(clientPort);//asign客户端端口
client.sin_family=AF_INET;//ipv4
client.sin\u addr.s\u addr=INADDR\u ANY;
bzero(和客户SINU zero,8);
if((bind(clientSock,(struct sockaddr*)和client,sizeof(struct sockaddr_in)))==-1){//bind socket with addrinfo
perror(“\n绑定:”);
} 
server.sinu family=AF\u INET;//服务器ipv4类型
server.sin_port=htons(serverPort);//分配服务器端口
server.sin_addr.s_addr=inet_addr(serverIp);//asign服务器ip
bzero(&server.sin_zero,8);
而(1){
//发送到服务器正常,然后等待接收:

if((recvfrom(clientSock,&rcvPkt,sizeof(struct packet),0,(struct sockaddr*)&服务器,&sockdlength))这是在Cygwin64下,我在Ubuntu下尝试了相同的代码,效果很好。有人能告诉我Cygwin有什么问题吗?在Windows上,
SO_RCVTIMEO
需要以毫秒为单位的
DWORD
表示,而不是
timeval
结构。
SO_RCVTIMEO
不可移植,你应该使用
select()
相反。我使用(Cygwin)而不是windows环境在Linux下运行代码Cygwin是一个将Linux API引入windows的仿真层,您如何在Linux上使用它?我使用的是Cygwin,它是Linux环境。因此,基本上代码是在Linux下编译的