IOS UDP recvfrom 在阻塞时有效,但在非锁定时无效



当我注释掉关闭阻塞的代码时,一切正常,但是当我将非阻塞代码留在其中时,我从未从 recvfrom 获得任何数据。(接收的字节数始终为 0) 这是注释掉阻塞语句的代码。 我是Xcode和IOS的新手,但已经为.NET创建了UDP代码。

 // Create Socket
int Handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (Handle <=0){
    printf("Failed to create socketn");
}
// Bind Socket
struct sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons((unsigned short) 4966);
if (bind(Handle,(struct sockaddr *) &address, sizeof(struct sockaddr_in))< 0){
    printf("Failed to Bindn");
}//end if
printf("Bind Donen");
// Set to non Blocking
int NonBlocking = 1;
//if (fcntl(Handle, F_SETFL, O_NONBLOCK, NonBlocking) == -1){
    printf("Faile to set nonblockingn");
//}
Boolean ContinueLoop = true;
    unsigned char Packet_Data[256];
    unsigned int Maximum_Packet_Size = sizeof(Packet_Data);
    struct sockaddr_in From_Address;
    socklen_t FromLength = sizeof(From_Address);
     while (ContinueLoop){
    int Received_Bytes = recvfrom(Handle, (char *)Packet_Data, Maximum_Packet_Size, 0, (struct sockaddr *)&From_Address, &FromLength);

    if (Received_Bytes > 0){
        ContinueLoop = false;
        printf("Got Data n");
    } else {
        perror("Now");
        printf(".");
    }

    close(Handle);
}//wend

发现问题。 我不小心在 while 循环中包含 close 语句。 将其移出它所属的循环,现在一切正常。 阻塞和非阻塞。

最新更新