Select 4 n select int select int nfds

  • Slides: 39
Download presentation

Select 모델 (4) n select() 함수 int select ( int nfds, fd_set *readfds, fd_set

Select 모델 (4) n select() 함수 int select ( int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout ); 성공: 조건을 만족하는 소켓의 개수 또는 0(타임아웃), 실패: SOCKET_ERROR TCP/IP 윈도우 소켓 프로그래밍 12

WSAAsync. Select 모델 (4) n WSAAsync. Select() 함수 int WSAAsync. Select ( SOCKET s,

WSAAsync. Select 모델 (4) n WSAAsync. Select() 함수 int WSAAsync. Select ( SOCKET s, HWND h. Wnd, unsigned int w. Msg, long l. Event ); 성공: 0, 실패: SOCKET_ERROR n 사용 예 #define WM_SOCKET (WM_USER+1) // 사용자 정의 윈도우 메시지. . . WSAAsync. Select(s, h. Wnd, WM_SOCKET, FD_READ|FD_WRITE); TCP/IP 윈도우 소켓 프로그래밍 21

WSAEvent. Select 모델 (5) n 이벤트 객체 생성과 제거하기 WSAEVENT WSACreate. Event ( )

WSAEvent. Select 모델 (5) n 이벤트 객체 생성과 제거하기 WSAEVENT WSACreate. Event ( ) ; 성공: 이벤트 객체 핸들, 실패: WSA_INVALID_EVENT BOOL WSAClose. Event (WSAEVENT h. Event) ; 성공: TRUE, 실패: FALSE TCP/IP 윈도우 소켓 프로그래밍 30

WSAEvent. Select 모델 (6) n 소켓과 이벤트 객체 짝짓기 int WSAEvent. Select ( SOCKET

WSAEvent. Select 모델 (6) n 소켓과 이벤트 객체 짝짓기 int WSAEvent. Select ( SOCKET s, WSAEVENT h. Event. Object, long l. Network. Events ); 성공: 0, 실패: SOCKET_ERROR TCP/IP 윈도우 소켓 프로그래밍 31

WSAEvent. Select 모델 (7) n 이벤트 객체의 신호 상태 감지하기 DWORD WSAWait. For. Multiple.

WSAEvent. Select 모델 (7) n 이벤트 객체의 신호 상태 감지하기 DWORD WSAWait. For. Multiple. Events ( DWORD c. Events, const WSAEVENT *lph. Events, BOOL f. Wait. All, DWORD dw. Timeout, BOOL f. Alertable ); 성공: WSA_WAIT_EVENT_0 ~ WSA_WAIT_EVENT_0+c. Events-1 또는 WSA_WAIT_TIMEOUT 실패: WSA_WAIT_FAILED TCP/IP 윈도우 소켓 프로그래밍 32

WSAEvent. Select 모델 (8) n 구체적인 네트워크 이벤트 알아내기 int WSAEnum. Network. Events (

WSAEvent. Select 모델 (8) n 구체적인 네트워크 이벤트 알아내기 int WSAEnum. Network. Events ( SOCKET s, WSAEVENT h. Event. Object, LPWSANETWORKEVENTS lp. Network. Events ); 성공: 0, 실패: SOCKET_ERROR TCP/IP 윈도우 소켓 프로그래밍 33

WSAEvent. Select 모델 (9) n 예제 코드 SOCKET s; WSAEVENT h. Event; WSANETWORKEVENTS Network.

WSAEvent. Select 모델 (9) n 예제 코드 SOCKET s; WSAEVENT h. Event; WSANETWORKEVENTS Network. Events; . . . WSAEnum. Network. Events(s, h. Event, &Network. Events); // FD_ACCEPT 이벤트 처리 if(Network. Events. l. Network. Events & FD_ACCEPT){ if(Network. Events. i. Error. Code[FD_ACCEPT_BIT] != 0){ printf("오류 코드 = %dn", Network. Events. i. Error. Code[FD_ACCEPT_BIT]); } else{ // accept() 함수 호출 } } TCP/IP 윈도우 소켓 프로그래밍 34

WSAEvent. Select 모델 (10) n 예제 코드(계속) // FD_READ 이벤트 처리 if(Network. Events. l.

WSAEvent. Select 모델 (10) n 예제 코드(계속) // FD_READ 이벤트 처리 if(Network. Events. l. Network. Events & FD_READ){ if(Network. Events. i. Error. Code[FD_READ_BIT] != 0){ printf("오류 코드 = %dn", Network. Events. i. Error. Code[FD_READ_BIT]); } else{ // recv() 함수 호출 } } TCP/IP 윈도우 소켓 프로그래밍 35

Event. Select. TCPServer 예제의 소켓 정보 관리 (1) n 소켓 정보 관리를 위한 구조

Event. Select. TCPServer 예제의 소켓 정보 관리 (1) n 소켓 정보 관리를 위한 구조 WSA_MAXIMUM_WAIT_EVENTS SOCKETINFO{} SOCKETINFO * TCP/IP 윈도우 소켓 프로그래밍 36

Thank you TCP/IP 윈도우 소켓 프로그래밍 www. hanb. co. kr 39

Thank you TCP/IP 윈도우 소켓 프로그래밍 www. hanb. co. kr 39