繁体   English   中英

阻止套接字到非阻止套接字

[英]Blocking sockets to non-blocking sockets

谁能帮我,如何将以下代码更改为非阻塞

struct sockaddr_un server_address;
int server_len, err;
int ret = 1;

int ipc_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (ipc_sockfd < 0) {
    printf("%s\n","SHM_IPC: socket creation failed");
    return 0;
}
server_address.sun_family = AF_UNIX;
strcpy(server_address.sun_path, SHM_IPC_SOCKET_NAME);
server_len = sizeof(server_address);

err = connect(ipc_sockfd, (struct sockaddr*)&server_address,
              server_len);
if (err < 0) {
    printf("%s %d\n", "IPC socket server not ready for"
                            ". Try after few moments, Errno:", errno);
    close(ipc_sockfd);
    return 0;
}

err = write(ipc_sockfd, (void *)msg, sizeof(shm_ipc_msg));
if (err <=0) {
    printf("%s %d\n", "SHM_IPC: socket write failed:",errno);
    ret = 0;
}
close(ipc_sockfd);
return ret;

这是我的客户端套接字,我需要我的客户端write()和connect()是非阻塞的(我不在乎服务器端),我是否需要将服务器套接字也更改为非阻塞才能生效?

非常感谢您的帮助!

此线程可能会帮助您: TCP套接字的connect()是否阻塞?

您可以使连接成为非阻塞,但是出于什么原因呢? 如果客户端未连接到服务器,则无法期望socket.write正常工作。 您需要等待直到连接完成。 写操作虽然不是阻塞操作。 如果建立了连接,则写函数应在发送数据后立即返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM