基本TCPソケット2−4
getsockname関数とgetpeername関数
#include <sys/socket.h> int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen); int getpeername(int sockfd, struct sockaddr *peeraddr, socklen_t *addrlen); 戻り値:成功 → 0, エラー → -1
getsocknameサンプル
#include <sys/socket.h> #include <sys/types.h> #include <stdio.h>#include <arpa/inet.h> int main() { int sockfd; struct sockaddr_in addr; struct sockaddr_in sockname; socklen_t addr_len = sizeof(sockname); int sockname_len = sizeof(sockname); sockfd = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(80); addr.sin_addr.s_addr = inet_addr("192.168.10.254");//接続先IPアドレスを指定する connect(sockfd, (struct sockaddr*)&addr, addr_len); getsockname(sockfd, (struct sockaddr*)&sockname, &sockname_len); printf("IP Address = %s, Port Number = %d\n", inet_ntoa(sockname.sin_addr), ntohs(sockname.sin_port)); return 0; }
getpeername サンプル
#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <arpa/inet.h> int main() { int listenfd, connfd; struct sockaddr_in addr; struct sockaddr_in client_addr; struct sockaddr_in peer; int client_addr_len = sizeof(client_addr); socklen_t peer_len = sizeof(peer); listenfd = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(8000); addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(listenfd, (struct sockaddr*)&addr, sizeof(addr)); listen(listenfd, 64); connfd = accept(listenfd, (struct sockaddr*)&client_addr, &client_addr_len); getpeername(connfd, (struct sockaddr*)&peer, &peer_len); printf("IP Address=%s, Port=%d\n", inet_ntoa(peer.sin_addr), ntohs(peer.sin_port)); return 0; }
参考文献