【问题标题】:Blocking sockets to non-blocking sockets阻塞套接字到非阻塞套接字
【发布时间】:2018-03-06 05:14:35
【问题描述】:

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

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() 是非阻塞的(我不关心服务器端),我是否需要将服务器套接字也更改为非阻塞生效了吗?

非常感谢您的帮助!

【问题讨论】:

    标签: c++ ipc


    【解决方案1】:

    这个帖子可能会对你有所帮助:Does connect() block for TCP socket?

    您可以使您的连接不阻塞,但出于什么原因?如果客户端没有连接到服务器,你不能指望 socket.write 工作。您需要等到连接完成。写操作虽然不是阻塞操作。如果连接已建立,则写入函数应在发送数据后立即返回。

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 2013-10-15
      • 1970-01-01
      • 2017-04-18
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多