![](/img/trans.png)
[英]TCP socket: detect if peer has shut down before sending? (Linux)
[英]Get socket peer IPS linux
在我的linux c ++應用程序中,我想編寫一個函數帽子,如果套接字對等體是本地的,它將檢查給定套接字。 我知道如何檢索所有本地IP,但是我不知道如何檢查套接字對等方是否來自本地IPS列表。
有什么幫助嗎? 請輸入密碼!
10倍
您正在尋找套接字對等方的getpeername()
。 在套接字的本地端使用getsockname()
。 以下代碼段將檢索Internet域中的套接字本地和對等地址。 如果需要的話,我會把它留給您擴展以處理其他類型的套接字。 我還提供了一些基本的錯誤檢查作為獎勵。
int
get_addresses(int sd, struct sockaddr_in *local_ptr,
struct sockaddr_in *peer_ptr)
{
int rc = -1;
if (local_ptr == NULL || peer_ptr == NULL) {
errno = EFAULT;
return rc;
}
if (sd == -1) {
errno = EBADF;
return rc;
}
if (local_ptr->sin_family != AF_INET || peer_ptr->sin_family != AF_INET) {
errno = EINVAL;
return rc;
}
rc = getsockname(sd, (struct sockaddr*)local_ptr,
sizeof(struct sockaddr_in));
if (rc == 0) {
rc = getpeername(sd, (struct sockaddr*)local_ptr,
sizeof(struct sockaddr_in));
if (rc < 0) {
if (errno == ENOTCONN) {
/* socket is not connected so zero out the peer side */
peer_ptr->sin_len = sizeof(struct sockaddr_in);
peer_ptr->sin_family = AF_INET;
peer_ptr->sin_port = 0;
peer_ptr->sin_addr.s_addr = INADDR_NONE;
rc = 0;
}
}
}
return rc;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.