Joinc 팀블로그 리눅스 메뉴얼 정리 Joinc 위키
댓글

Recent Comments

Powered by Disqus
팀블로그 카테고리
  전체 (1105)
   공지사항 (1)
   검색엔진 (21)
   기술동향 (58)
   게임 (2)
   독서 (6)
   리눅스 (12)
   보안 (1)
   사회문제 (22)
   어셈블리 (43)
   영화 (3)
   오픈소스 (10)
   음악 (9)
   인물 (1)
   포인터 (4)
   프로그래머 (23)
   팀블로그 (20)
   테터툴즈 (29)
   C/C++ (152)
   FireFox (11)
   Gimp (2)
   Google (98)
   Java (13)
   Perl (2)
   Pthread (11)
   STL (13)
   TCP/IP (8)
   Tools (31)
   Web2.0 (42)
   Wiki (1)
«   2010/07   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
2007/05/22 22:20

getsockname - 소켓 정보를 얻어온다.

출처 : Joinc Wiki

1장. getsockname(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제

소켓의 정보를 가져온다.


1.1절. 사용법

#include <sys/socket.h>

int getsockname(int s, struct sockaddr *name, socklen_t *namelen);


1.2절. 설명

이 함수는 지정한 소켓지정자 s 에 대한 정보를 반환시켜준다.


1.3절. 반환값

성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.


1.4절. 에러

EBADF

s 가 유효한 기술자가 아니다.

ENOTSOCK

s 가 소켓이 아닌 파일일경우

ENOBUFS

시스템의 리소스가 충분치 않다.


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;
}
:::