URL : http://christin2.tistory.com/22
소켓(Socket)
: 물리적으로 연결된 네트워크상에서의 데이터 송수신에 사용할 수 있는 소프트웨어적인 장치를 의미
: 프로그래밍에서의 소켓은 네트워크 망의 연결에 사용되는 도구
.....
ref URL : http://forum.falinux.com/zbxe/?mid=C_LIB&document_srl=429387&sort_index=readed_count&order_type=desc
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/socket
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/bind
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/listen
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/accept
.....
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/connect
저 수준 파일 입출력(Low-level File Access)과 파일 디스크립터(File Descriptor)
저 수준 파일 입출력(Low-level File Access)
: 리눅스 혹은 윈도우즈 자체에서 제공해 주는 파일 입출력 함수를 사용하여 파일을 관리(파일의 생성 및 삭제, 데이터 입력 및 출력) 하는 것을 의미함
파일 디스크립터(File Descriptor)
: 시스템으로부터 할당 받은 파일 또는 소켓에 부여된 정수를 의미
: 파일을 관리하기 위해서 모든 파일(파일, 소켓 표준 입력, 표준 출력)에 파일 디스크립터를 할당
- 파일과 소켓은 생성의 과정을 거쳐야 파일 디스크립터가 할당
- 위의 세 가지 입출력 대상은 별도의 생성과정을 거치지 않아도 프로그램이 실행되면 자동으로 할당
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/open
- 첫 번째 인자는 파일의 이름 및 경로 정보
- 두 번째 인자는 파일의 오픈 모드 정보(파일의 특성 정보)
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/close
- 파일 디스크립터를 인자로 전달하면 해당 파일은 종료
- 소켓을 닫을 때도 사용
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/write
- fd : 데이터 전송 대상을 나타내는 파일 디스크립터 전달
- buf : 전송할 데이터가 저장된 버퍼의 주소 값 전달
- nbytes : 전송할 데이터의 바이트 수 전달
ref URL : http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/2/read
- fd : 데이터 수신 대상을 나타내는 파일 디스크립터 전달
- buf : 수신할 데이터가 저장된 버퍼의 주소 값 전달
- nbytes : 수신할 데이터의 바이트 수 전달
윈도우 소켓을 위한 헤더와 라이브러리 설정
- 헤더파일 winsock2.h를 포함
- ws2_32.lib 라이브러리를 링크 시킴
- 윈속 사용을 위한 라이브러리 초기화 및 해제
ref URL : http://synch3d.com/winsock/WSAStartup.html
- wVersionRequested : 프로그래머가 사용할 윈속의 버전정보 전달
(상위 8비트 : 부 버전 정보, 하위 8비트 : 주 버전 정보)
- lpWSAData : WSADATA라는 구조체 변수의 주소 값 전달
ref URL : http://synch3d.com/winsock/WSACleanup.html
할당된 윈속 라이브러리는 윈도우 운영체제에 반환되면서 윈속 관련 함수의 호출이 불가능해짐
윈도우 기반 소켓관련 함수
ref URL : http://synch3d.com/winsock/socket.html
SOCKET socket ( int af, int type, int protocol );
ref URL : http://synch3d.com/winsock/bind.html
int bind ( SOCKET s, const struct sockaddr FAR * name, int namelen );
ref URL : http://synch3d.com/winsock/listen.html
int listen ( SOCKET s, int backlog );
ref URL : http://synch3d.com/winsock/accept.html
SOCKET accept ( SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen );
ref URL : http://synch3d.com/winsock/connect.html
int connect ( SOCKET s, const struct sockaddr FAR * name, int namelen );
ref URL : http://synch3d.com/winsock/closesocket.html
int closesocket ( SOCKET s );
* 윈도우에서 시스템 함수의 호출을 통해서 파일을 생성할 때 '핸들'이라는 것을 반환함
* 윈도우에서의 핸들은 리눅스에서의 파일 디스크립터에 비교될 수 있음
* 리눅스에서는 파일 핸들과 소켓 핸들을 동일하게 취급(윈도우는 두 개를 구분함)
윈도우 기반 입출력 함수
ref URL : http://synch3d.com/winsock/send.html
- s : 데이터 전송 대상과의 연결을 의미하는 소켓의 핸들 값 전달
- buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달
- len : 전송할 바이트 수 전달
- flags : 데이터 전송 시 적용할 다양한 옵션 정보 전달
ref URL : http://synch3d.com/winsock/recv.html
- s : 데이터 수신 대상과의 연결을 의미하는 소켓의 핸들 값 전달
- buf : 수신된 데이터를 저장하고 있는 버퍼의 주소 값 전달
- len : 수신할 수 있는 최대 바이트 수 전달
- flags : 데이터 수신 시 적용할 다양한 옵션 정보 전달
'Programming > Linux C/C++' 카테고리의 다른 글
소켓의 타입과 프로토콜의 설정 (0) | 2014.09.01 |
---|---|
주소체계와 데이터 정렬 (2) | 2014.08.29 |
TCP 기반 서버/클라이언트 1 (0) | 2014.08.29 |
linux socket summary (0) | 2014.06.15 |
리눅스 커널 내부 구조@kandroid (0) | 2014.06.03 |