본문 바로가기

□컴퓨터 관련/★Linux

소켓함수

출처: http://linuxqna.com/579

socket 함수 : 소켓 지정자 socket( 인자 도메인, 소켓의 형태, 프로토콜 종류 )
-> 해당 소켓을 생성하고 디스크립션을 반환한다.

inet_addr 함수 :  이진 바이너리 형식의 IP 주소 inet_addr( 문자 형식의 IP 주소) 
ex)  127.0.0.1 을 Big Endian의 네트워크 바이트 오더에 맞는 이진 바이너리 주소 0x100007f로 변경

htons 함수 : 네트워크 바이트 오더에 적용된 이진 바이너리 16비트 값 htons( 16비트 변수 값 )
-> 16비트의 unsigned short형 숫자 값에 네트워크 바이트 오더를 적용한 후 반환한다.

connect 함수 : 성공 여부 반환 connect( 소켓 디스크립션, 서버의 IP 주소와 포트번호, 길이 )
->  리턴 값이 0이면 성공 -1이면 실패

 1)TCP 소켓에서의 connect함수의 의미
  - IP와 Port의 할당
  - 연결 요청 진행(Three-way handshaking)
 2)UDP 소켓에서의 connect 함수의 의미
  - IP와 Port의 할당

 *참고 : connect함수 호출을 하지 않으면 IP와 Port는 언제 할당 되는가 ?
         열혈강의 156page 참고
read함수 : 읽은 값의 길이 read( 파일 디스크립터, 읽은 데이터를 저장할 버퍼, 읽을 데이터 최대 길이 )
-> 오류 발생시 -1 리턴

colse함수 : 성공 여부 반환 close( 파일 디스크립터 )
->  리턴 값이 0이면 성공 -1이면 실패


★ 서버 
htonl함수 : 32비트 네트워크 바이트 오더형 숫자 htol (32비트 호스트 오더형 숫자)

bind함수 : 성공 여부 반환 bind( 소켓 디스크립터, 로컬 주소, 로컬 주소 구조체 크기)
-> 생성된소켓에 로컬 주소를 할당 성공시 0 실패시 -1

listen함수 : 성공 여부 반환 listen( 소켓 디스크립터, 최대 연결할 큐의 길이 )
-> 해당 소켓의 연결을 기다린다. 연결은 큐의 길이만큼만 가능 일반적으로 5를 많이 사용
   성공시 0 실패시 -1

accept함수 : 성공한 소켓 디스크립터 accept( 소켓 디스크립터, 접속한 상대편 연결 정보, 연결 정보 길이 )
-> 연결 요청이 들어 왔을시 연결을 받아 들인다. 연결 요청이 없을시 연결요청이 발생할 때 까지 대기, 실패시 -1 반환

write함수 : 성공시 쓰여진 데이터 길이 write(파일 디스크립터, 전송할 버퍼, 전송할 데이터 길이 )
-> 쓰기에 성공하면 쓰기에 성공한 길이를 반환하고, 오류가 발생하면 -1을 반환한다.

close함수 : 성공 여부 반환 close( 파일 디스크립터 )
-> 리턴 값이 0이면 성공 -1이면 실패

shutdown함수 : 성공 여부 반환 shutdown( 종료하고자하는 소켓의 파일 디스크립터, 종료 모드 )
-> 리턴 값이 0이면 성공 -1이면 실패 
-> 모드 
   0 : SHUT_RD -> 입력 스트림 종료 
   1 : SHUT_WR -> 출력 스트림 종료
   2 : SHUT_RDWR -> 입 * 출력 스트림 종료


★ TCP
send함수 : 전송한 바이트 수 send( 소켓의 핸들, 버퍼를 가리키는 포인터, 전송할 바이트 수, 플래그 옵션 )
-> 성공 시 전송한 바이트 수, 실패 시 SOCKET_ERROR 리턴

recv함수 : 수신한 바이트 수 recv( 수신할 영역의 소켓 핸들, 버퍼를 가리키는 포인터, 수신할 최대 바이트 수, 플래그 옵션 )
-> 성공 시 수신한 바이트 수, 실패 시 SOCKET_ERROR 리턴


★ UDP
sendto함수 : 보내진 데이터의 수 sendto (소켓 디스크립터, 데이터, 데이터 길이, 플래그 옵션, 전송할 소켓의 주소, 전송할 소켓 주소의 길이)
-> 지정된 주소에 데이터를 전송한다.

recvfrom함수 : 받은 데이터의 수 recvfrom(소켓 디스크립터, 데이터, 데이터 길이, 플래그 옵션, 전송한 소켓의 주소, 전송한 소켓 주소의 길이)
->소켓으로부터 데이터를 수신한다. 블로킹 모드일 경우는 데이터가 도착할 때까지 기다리고, 비믈로킹 모드일 경우는 -1을 반환 한다.


※리눅스에서는 소켓도 파일로 취급
★ 리눅스 File 열기
open함수 : 파일 디스크립터 open( 파일의 경로를 포함한 문자열 포인터, 파일 오픈 모드)
-> 성공시 파일 디스크립터 실패시 -1 리턴
-> 모드
  O_CREAT  : 필요한 경우 파일을 생성
  O_TRUNC  : 존재하던 데이터를 모두 삭제
  O_APPEND : 존재하던 데이터를 보관하고 뒤에 이어서 저장
  O_RDONLY : 읽기 전용 모드
  O_WRONLY : 쓰기 전용 모드
  O_RDWR   : 읽기 쓰기 겸용 모드


★ 리눅스 File 닫기
close함수 :성공 여부 반환 close( 닫아줄 파일 디스크립터 )
-> 성공 시 0, 실패 시 -1 리턴


★ 윈도우 File 열기(ANSI 표준 C)
fopen함수 : File포인터 반환 fopen( 파일의 경로를 포함한 문자열 포인터, 모드 )
-> 성공 시 개방된 스트림의 FILE* 를 리턴
-> 모드 
   r : 읽기 전용
   w : 쓰기 전용(파일이 존재시 기존파일은 삭제)
   a : 추가 (파일이 존재하지 않을 시 w와 동일)
   r+,w+ : 읽고 쓰는 것이 다 가능한 상태로 개방
           스트림 미 존재시 r+ 는 에러를 리턴
                            w+ 는 새로운 스트림 생성
   a+ : 추가를 위해 스트림 개방( 스트림 미존재시 w+와 동일)
   
   "t" 개방할 파일이 텍스트 파일
   "b" 개방할 파일이 바이너리 파일
   ex) "rt"   : 텍스트 파일을 읽기전용
        "wb" : 이진 파일을 쓰기 전용


 

fclose함수 : File포인터 반환 fclose( 파일의 경로를 포함한 문자열 포인터 )
-> 성공 시 0을 리턴에러 발생 시 EOF(-1)을 리턴


fread함수 : 읽은 데이터 항목의 개수 fread( 읽어들일 메모리 번지, 항목의 크기, 항목의 개수, 읽어들일 파일 포인터 )

-> 읽은 데이터 항목의 개수를 리턴!! 읽은 바이트 수가 아님!!


fwrite함수 : 출력된 항목의 개수 fwrite( 출력할 데이터가 들어 있는 번지, 출력할 항목의 크기, 출력할 항목의 개수 )

-> 실제 스트림으로 출력된 항목의 개수를 리턴!! 출력한 바이트 수가 아님!!

 

★ 리눅스

pthread_create함수 : 반환 값 pthread_create( 생성된 쓰레드의 ID를 저장할 변수의 포인터 , 쓰레드의 특성을 설정할 때 사용 일반적으로 NULL, 실제 쓰레드에서 실행될 쓰레드 함수, 실행될 쓰레드 함수에 넘길 함수 인자 )

-> 성공시 0, 실패 시 이외의 값 리턴


pthread_join함수 : 반환 값 pthread_join( 지연시킬 쓰레드, 쓰레드의 리턴 값에 접근할 수 있는 2차원 포인터 )

-> 성공시 0, 실패 시 이외의 값 리턴


Select함수 : 반환 값 select (파일 디스크립터 크기, 읽기 파일 디스크립터, 쓰기 파일 디스크립터, 예외 파일 디스크립터, 기다리는 시간 )

-> 지정된 파일 디스크립터를 지속적으로 감시해서 I/O가 발생했는지를 반환한다.

    반환 값이 0 : 타임아웃을 의미

    반환 값이 -1 : 오류

    첫번째 인자 : 감시할 파일 디스크립터의 크기

    readfds : 읽기 상태 I/O를 감시할 파일 디스크립터

    writefds : 쓰기 상태 I/O를 감시할 파일 디스크립터

    exceptfds : 예외 상태 I/O를 감시할 파일 디스크립터

    timeval 인자에는 select 함수가 기다릴 시간이 설정

 

FD_로 시작하는 함수

- 없음 FD_ZERO ( 파일 디스크립터 ) -> 파일 디스크립터 테이블을 0으로 초기화한다.

- 없음 FD_SET ( 파일 디스크립터, 파일 디스크립터 테이블 ) -> 파일 디스크립터 테이블에 파일 디스크립터 값을 설정한다.

- 없음 FD_CLR ( 파일 디스크립터, 파일 디스크립터 테이블 ) -> 파일 디스크립터 테이블에 파일 디스크립터 값을 해제한다.

- 없음 FD_ISET ( 파일 디스크립터, 파일 디스크립터 테이블 ) -> 파일 디스크립터에 I/O가 발생했는지 확인한다.

                                                                                        I/O가 발생했으면 True를 반환한다.

* 뮤텍스를 조작하는 함수들(성공시 0을 리턴)
  #include <pthread.h>
  뮤텍스 초기화 함수     :   int pthread_mutex_init( pthread_mutex_t* mutex, const pthread_mutexattr_t* mutexattr );
  뮤텍스 잠그는 함수     :   int pthread_mutex_lock( pthread_mutex_t* mutex ); 
  뮤텍스 풀어주는 함수  :   int pthread_mutex_unlock( pthread_mutex_t* mutex ); 
  뮤텍스 소멸 함수        :   int pthread_mutex_destroy( pthread_mutex_t* mutex );


* 세마포어를 조작하는 함수들(성공시 0을 리턴)
 #include <semaphore.h>
 - 세마포어 초기화 함수 : int sem_init( sem_t* sem, int pshared, unsigned int value );
 - 세마포어 증가 함수   : int sem_post( sem_t* sem );
 - 세마포어 감소 함수   : int sem_wait( sem_t* sem );
 - 세마포어 소멸 함수   : int sem_destroy( sem_t sem );