在Linux中,可以使用getsockopt函數來判斷socket連接的狀態。getsockopt函數用于獲取socket選項的值。其中,可以使用SO_ERROR選項來獲取socket連接的錯誤碼,從而判斷連接狀態。
下面是一個例子:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
int main() {
int sockfd;
int error;
socklen_t len = sizeof(error);
// 創建socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
return 1;
}
// 連接到服務器
struct sockaddr_in servaddr;
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(80);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
perror("connect");
return 1;
}
// 獲取socket選項的值
if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
perror("getsockopt");
return 1;
}
// 判斷socket連接狀態
if (error == 0) {
printf("Socket connected successfully.\n");
} else {
printf("Socket connection failed with error %d.\n", error);
}
// 關閉socket
close(sockfd);
return 0;
}
在以上例子中,首先創建了一個socket,并連接到指定的服務器。然后使用getsockopt函數獲取SO_ERROR選項的值,將錯誤碼保存在error變量中。最后根據error的值來判斷socket連接的狀態,如果error為0,則表示連接成功;否則,表示連接失敗,并打印錯誤碼。最后關閉socket。
需要注意的是,getsockopt函數的第三個參數是SO_ERROR,它是一個整數,用于存儲socket連接的錯誤碼。另外,需要包含頭文件sys/types.h和sys/socket.h。