출처 : Joinc Wiki
1장. getsockname(2)
소켓의 정보를 가져온다.
1.5절. 예제
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int sockfd;
int client_sockfd;
int client_len;
int state;
struct sockaddr_in clientaddr, serveraddr, myaddr,test;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
perror("socket error : ");
exit(0);
}
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
serveraddr.sin_port = htons(4444);
state = bind(sockfd , (struct sockaddr *)&serveraddr,
sizeof(serveraddr));
if (state == -1)
{
perror("bind error : ");
exit(0);
}
state = listen(sockfd, 5);
if (state == -1)
{
perror("listen error : ");
exit(0);
}
client_len = sizeof(clientaddr);
client_sockfd = accept(sockfd, (struct sockaddr *)&clientaddr,
&client_len);
// 바로 이부분에서 연결된 client_sockfd 에 대한
// 정보를 얻어온다.
// 언어온 정보는 myaddr 에 채워진다.
getsockname(client_sockfd, (struct sockaddr *)&myaddr, &client_len);
// 얻어온 정보를 출력한다.
printf("Port : %d\n", myaddr.sin_port);
printf("address : %s\n", inet_ntoa(myaddr.sin_addr));
close(client_sockfd);
close(sockfd);
return 1;
}
:::
이글과 관련된 글