문서 정보
  • Archive-name: unix-faq/socket
  • Posting-Frequency: monthly
  • 최근 수정일: 1997/12/21
  • URL: http://www.auroraonline.com/sock-faq/
  • 한글판작성자: 안창선(csan@coresw.co.kr, http://genesis.yonsei.ac.kr/~kabin)
  1. 일반 정보와 개념
    1. 이 FAQ에 대하여
    2. 누구를 위한 FAQ 인가?
    3. 소켓은 무엇인가?
    4. 소켓은 어떻게 작동하는가?
    5. 책에 있는 소스코드를 구할 수 있는데가 있는가?
    6. 또 다른 정보들은 어디에서 구할 수 있는가?

1. 일반 정보와 개념

1.1. 이 FAQ에 관하여

이 FAQ는 Andrew Gierth (andrew@erlenstar.demon.co.uk)의 도움과 더불어 Vic Metcalfe (vic@acm.org)에 의해 유지 되고 있다. 난 지금 나의 많은 실수와 세부적인 것들을 채우기 위해 마법의 지팡이에 의지하고 있는 중이다. 여기에 있는 코드 예제는 알아보기 쉽고 따라하기 쉽도 록 만들어 졌다. 얼마냐 효율적으로 이것들이 쓰이는가는 독자에게 달려 있다. 나는 이 FAQ를 만드는 것을 comp.unix.programmer를 잠깐 읽어 보고 FAQ가 필요하다고 생각되서 시작했다.

이 FAQ는 다음에서도 구할 수 있다.

Usenet: (매월 21일에 포스팅 된다.)

news.answers, comp.answers, comp.unix.answers, comp.unix.programmer

FTP:

ftp://rtfm.mit.edu/pub/usenet/news.answers/unix-faq/socket

WWW:

http://www.ibrado.com/sock-faq
http://kipper.york.ac.uk/~vic/sock-faq

만약 어떤 잘못된 점 등이 있으면 메일을 보내 주기 바란다. 여러분들이 내게 보내주는 질문 또한 여기에 추가 할 것이다. 그것에 대한 대답을 내가 못할 지라도 다른 누군가 대답핼 줄거라 는 기대를 가지고 여기에 추가 할 것이다. 매 시간 내가 좀 바쁘기 때문에 가끔식 대답이 좀 느 릴 수도 있으니까, 참고 기다려 보라. 몇주가 지나도 대답이 없으면 다른 메일을 또 보내라 왜냐 면 가끔씩 내가 실수로 잊는 경우도 있기 때문이다.

1.2. 이 FAQ는 누구를 위한 것인가?

이 FAQ는 유닉스 환경에서의 C프로그래머를 위한 것이다. WinSock 프로그래머나 PERL, Java나 기타에서 작업하는 프로그래머를 위해 의도된 FAQ가 아니다. 그렇다고 내가 Windows나 Perl 등을 거부하는 것은 아니고, 이 첫 번째 초안에 대해 범위를 제한 해야만 했다. 나중에 Perl 이나 자바 등 다른 것에 대한 예제도 제공할 것이다. 지금부터 나는 C언어를 기준으로 이 FAQ 를 다룰 것이다.

이 FAQ의 버전은 오직 AF_INET 계열의 소켓만을 다룰 것이다. 왜냐하면 이 AF_INET계열이 가장 일반적으로 쓰이고 있기 때문이다. 다른 것들은 후에 다룰 예정이다.

1.3. 소켓은 무엇인가?

소켓은 단지 과학소설에서 말하는 "벌레 구멍"이다. 어떤 물건이 한쪽 끝으로 들어가면 그건 다 른쪽 끝으로 나오게 된다. 다른 종류의 소켓은 다른 속성을 가지고 있다. 소켓은 "connection-oriented"또는 "connectionless"의 두가지 종류가 있다. connectionless가 connection open없이 한 번에 하나의 메시지만 전송할 수 있는데 비해서 connection-oriented소켓은 데이터가 필요에 따라 앞뒤로 흐를 수 있다. 가장 많이 쓰이는 것에는 인터넷 연결을 위한 AF_INET과 unix IPC(interprocess communication)를 위한 AF_UNIX의 두가지가 있다. 이미 말했듯이, 이 FAQ는 AF_INET 소켓을 다룬다.

1.4. 소켓은 어떻게 동작 하는가?

실제 동작은 특정 유닉스 벤더에 의존하긴 하지만 프로그래머의 입장에서 보면 connection-oriented 소켓은 마치 파일 또는 pipe처럼 동작한다. 한 번 여러분이 여러분의 파일 디 스크립터를 소유하게 되었을때에, 가장 주의해야할 틀린점은 read()또는 write()호출이 실제로 호 요청한 바이트 보다 적은 바이트를 읽거나 쓰게 될 수 있다는 점이다. 만약 이렇게 되면 나머지 데이터를 얻기 위해 두 번째 호출을 해야 한다. 이것에 대한 예제 소스코드 위치가 이 FAQ에 적 혀 있다.

1.5. 시중의 네트웍프로그래밍관련 책의 소스코드를 어디서 얻을 수 있는가?

여기 내가 알고 있는 네트웍 프로그래밍 책에 대한 소스코드의 위치가 있다. 몇 개 안되기 때 문에 여러분들이 다른 소스코드 위치를 알려 주면 추가 하겠다.

Title: Unix Network Programming
Author: W. Richard Stevens (rstevens@noao.edu)
Publisher: Prentice Hall, Inc.
ISBN: 0-13-949876-1
URL: http://www.noao.edu/~rstevens

Title: Power Programming with RPC
Author: John Bloomer
Publisher: O'Reilly & Associates, Inc.
ISBN: 0-937175-77-3
URL: ftp://ftp.uu.net/published/oreilly/nutshell/rpc/rpc.tar.Z
Recommended by: Lokmanm Merican (lokmanm#pop4.jaring.my@199.1.1.88)

Title: UNIX PROGRAM DEVELOPMENT for IBM PC'S Including OSF/Motif
Author: Thomas Yager Publisher: Addison Wesley, 1991
ISBN: 0-201-57727-5

1.6. 또 다른 정보를 얻으려면 어디를 가봐야 하나?

나는 내가 알고 있는 것에 대한 복사본을 내 홈페이지에 보관하고 있다. 나는 대부분의 그것들 을 어디서 얻었는지 기억이 없다. 언제 한 번 그 정보들의 소스를 찾아보고 ftp정보를 여기에 추 가 하겠다. 지금까지의 것들을 여러분들은 여기에서 그들을 얻을 수 있다.

http://www.ibrado.com/sock-faq.

George Neville-Neil(gnn@wrs.com)에 의해 유지되는 좋은 TCP/IP FAQ가 다음에 있다.

http://www.visi.com/~khayes/tcpipfaq.html