Search

socket(), closesocket()

[- Disclaimer -] 아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
socket()
✦ Socket 생성
✦ Parameter1에 전달되는 Argument1
✧ 주소 체계
→ AF_INET, AF_INET6, AF_IRDA, AF_BTH
✦ Parameter2에 전달되는 Argument2
✧ Socket Type
→ SOCK_STREAM // 연결 지향형 Protocol
→ SOCK_DGRAM // 비연결 지향형 Protocol
✦ Parameter3에 전달되는 Argument3
✧ 사용할 Protocol이며, Parameter2까지만 지정해도 Protocol이 1개가 나온다면 NULL로 지정 가능
→ IPPROTO_TCP, IPPROTO_UDP
✦ Return 값
✧ 성공
→ 새 Socket
✧ 실패
→ INVAILD_SOCKET
SOCKET socket(int af, int type, int protocol);
Plain Text
복사
SOCKET Type
✦ Socket Descriptior
✦ 32 bit 정수
주소 체계 확인
✦ <winsock2.h> 혹은 <ws2def.h>
(...) #define AF_INET 2 // Internetwork: UDP, TCP, etc (...) #define AF_INET6 23 // Internetwork Version 6 (...) #define AF_IRDA 26 // IrDa (...) #define AF_BTH 32 // Blooth RFCOMM/L2CAP protocols (...)
Plain Text
복사
closesocket()
✦ Socket 닫기
✦ Return 값
✧ 성공
→ 0
✧ 실패
→ SOCKET_ERROR
int closesocket(SOCKET s);
Plain Text
복사
Socket 생성 및 닫기 - Ex)
#pragma comment(lib, "ws2_32") #include <winsock2.h> void err_display(char *msg) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL); printf("[%s] %s", msg, (char *)lpMsgBuf); LocalFree(lpMsgBuf); exit(1); } int main(int argc, char *argv[]) { // Winsock 초기화 WSADATA wsa; if(WSAStartup(MAKEWORD(2,2), &wsa) != 0) return 1; HANDLE hThread[2]; hThread[0] = CreateThread(NULL, 0, TCPServer4, NULL, 0, NULL); hThread[1] = CreateThread(NULL, 0, TCPServer6, NULL, 0, NULL); WaitForMultipleObjects(2, hThread, TRUE, INFINITE); // Winsock 종료 WSACleanup(); return 0; }
Plain Text
복사