2010년 10월 22일 금요일

WSA 함수군

앞서 설명했던 소켓 함수들은 OVERLAPPED된 입출력과는 무관한 함수들이다. 따라서 이 구조체를 사용하기 위해서는 기존의 recv()등의 표준 함수 이외에  WSA접두어가 붙은 함수를 이용해서 소켓을 생성하고 데이터 패킷을 주고받아야한다.

함수:WSASocket()

설명:socket()함수와 마찬가지로 소켓을 생성한다.

원형: SOCKET WSASocket(

int                                    af,

int                                    type,

int                                    protocol,

LPWSAPROTOCOL_INFO    lpProtocollnfo,

GROUP                             g,

DWORD                            dwFlags

);

리턴값 :성공하면 생성된 소켓을 리턴하고, 실패하면 INVALID_SOCKET을 리턴한다.

1.af

네트워크 주소 패밀리를 의미하는 지정자.

2.type

새로운 소켓의 타입.

3.protocol

사용할 프로토콜의 종류를 지정한다. 이것은 주소 패밀리와 함께 사용된다.

4.lpProtocollnfo

WSAPROTOCOL_INFO 구조체의 주소. 생성되는 소켓의 속성을 정의하는 구조체이다.

5.g

예약된 멤버 변수이다.

6.dwFlags

소켓 속성을 지정하는 플래그. 이 플래그에서 WSA_FLAG_OVERLAPPED를 지정하면 OVERLAPPED를 상요할 수 있다.

=WSASocket()함수는 마지막 dwFlags인자에 WSA_FLAG_OVERLAPPED를 지정하여 OVERLAPPED 입출력을 이용할 수 있도록 소켓을 생성할 수있다.

 

함수: WSAAccept()

설명: listen()함수로 대기 상태가 된 서버가 접속을 기다리다 실제 접속을 해 주는 함수이다.

원형: SOCKET WSAAccept(

SOCKET                          s,

struct sockaddr FAR         *addr,

LPINT                              addrlen,

LPCONDITIONPROC          lpfnCondition,

DWORD                           dwCallbackData

);

리턴값: 접속한 peer에게 할당된 소켓

1.s

listen()함수가 호출된 후 연결에 이용될 소켓.

2.addr

연결 엔티티의 주소의 버퍼 포인트로 ,옵션 이다.

3.addrlen

addr 인자의 크기

4.lpfnCondition

컨디션 함수의 주소.

5.dwCallbackData

콜백 함수의 데이터 . lpfnCondition 컨디션 함수의 인자이다.

 

함수:WSAConnect()

설명: WSAConnect()함수는 다른 어플리케이션의 소켓으로 접속을 시도한다.

원형: int WSAConnect(

SOCKET                             s,

const struct sockaddr FAR   * name,

int                                      namelen,

LPWSABUF                         lpCallerData,

LPWSABUF                         lpCalleeData,

LPQOS                               lpSQOS,

LPQOS                               lpGQOS

);

리턴값 : 성공할 경우에는 0을 ,실패할 경우에는 SOCKET_ERROR값을 리턴한다.

1.s

클라이언트에게 할당된 소켓.

2.name

서버의 소켓 주소,

3.namelen

name 인자의 길이.

4.lpCallerData

클라이언트가 연결을 할때 정보를 제공하는 WSABUF 구조체의 포인터.

5.lpCalleeData

서버가 클라이언트에게 제공해 주는 정보.

6.lpSQOS

클라이언트 소켓에 QOS를 요청하는 인자.

7.lpGQOS

소켓 그룹의 QOS를 요청하는 인자.

 

 

함수 : WSASend()

설명:  이 함수는 지정된 소켓을 통해서 다른 어플리케이션으로 패킷을 전송한다.

원형: int WSASend(

SOCKET                              s,

LPWSABUF                          lpBuffers,

DWORD                               dwBufferCount,

LPDWORD                           lpNumberOfBytesSent,

DWORD                               dwFlags,

LPWSAOVERLAPPED           lpOverlapped,

LPWSAOVERLAPPED_COMPLETION_ROUTINE       lpCompletionROUTINE

);

리턴 값: 성공할 경우 보내어진 바이트의 수를 리턴

1.s

클라이언트의 소켓.

2.lpBuffers

WSABUF 구조체 배열의 포인터. 각 WSABUF 구조체는 버퍼의 포인터와 버퍼의 길이를 가지고있다.

 3.dwBufferCount,

lpBuffers 배열에 있는 WSABUF 구조체의 인덱스.

4.lpNumberOfBytesSent,

I/O 완료 포트를 연산할 경우 이 인자를 호출하여 바이트의 수를 리턴 받는다. 

5.dwFlags

호출 방식을 지정하는 플래그.

6.lpOverlapped,

WSAOVERLAPPED 구조체의 포인터.

7.lpCompletionROUTINE

보내기가 완료(complete)되었을때 호출하는 루틴.

 

함수: WSARecv()

설명: 이 함수는 지정된 소켓을 통해서 다른 어플리케이션으로 패킷을 수신한다.

원형: int WSARecv(

SOCKET                                  s,

LPWSABUF                              lpBuffers,

DWORD                                   dwBufferCount,

LPDWORD                               lpNumberOfBytesRecvd,

LPDWORD                               lpFlags,

LPWSAOVERLAPPED               lpOverlapped,

LPWSAOVERLAPPED_COMPLETION_ROUTINE        lpCompletionROUTINE

);

1.s

송신할 소켓.

2. lpBuffers

WSABUF   구조체의 배열의 인덱스.각 WSABUF 구조체는 버퍼와 버퍼의 길이 포인터를 포함하고 있다.

3. dwBufferCount

lpBuffers 배열에서의 WSABUF  구조체의 인덱스.

4. lpNumberOfBytesRecvd

바이트의 수를 지정하는 포인터로, 받기 연산 완료를 받았을대 호출된다.

5.lpFlags

포인터의 플래그.

6.lpOverlapped

WSAOVERLAPPED 구조체의 포인터.

 

7.lpCompletionROUTINE

받기 연산이 완료되었을때 호출되는 함수의 Completion 포이터.

댓글 없음:

댓글 쓰기