앞서 설명했던 소켓 함수들은 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 포이터.
댓글 없음:
댓글 쓰기