簡體   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