티스토리 뷰
#include <winsock2.h>
#include <process.h>
#define SERVER_PORT 9080
char __fastcall TMainFrm::InitSocket(void)
{
WSADATA wsaData;
SOCKET servSock;
SOCKET clntSock;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
int clntAddrSize;
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
MsgBox("WSAStartup() Error");
return FALSE;
}
// TCP소켓
servSock = socket(PF_INET, SOCK_STREAM, 0);
if(servSock == INVALID_SOCKET) {
MsgBox("socket() Error");
return FALSE;
}
// 서버 소켓이 종료 되었을때 TIME_WAIT상태가 되어 서버 소켓을 재 실행하면 bind Error가 난다.
// TIME_WAIT상태를 거치치 않도록 하는 옵션이다.
int option = TRUE;
setsockopt(servSock, SOL_SOCKET, SO_REUSEADDR, (char *)&option, sizeof(option));
// 타임 아웃 설정
// struct timeval tv_timeo = { 3, 500000 }; /* 3.5 second */
// if(setsockopt(servSock, SOL_SOCKET, SO_RCVTIMEO, &tv_timeo, sizeof( tv_timeo )) == -1) { MsgBox("rcvTimeout() Error"); return FALSE; }
// if(setsockopt(servSock, SOL_SOCKET, SO_SNDTIMEO, &tv_timeo, sizeof( tv_timeo )) == -1) { MsgBox("sndTimeout() Error"); return FALSE; }
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(SERVER_PORT);
if(bind(servSock, (struct sockaddr*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) {
MsgBox("bind() Error");
return FALSE;
}
if(listen(servSock, 50) == SOCKET_ERROR) {
MsgBox("listen() Error");
return FALSE;
}
return TRUE;
}
'프로그래밍 > C, C++' 카테고리의 다른 글
modbus tcp Master (libmodbus 라이브러리) (0) | 2020.03.26 |
---|---|
도메인 이름만으로 서버 접속하기 (0) | 2019.08.09 |
TCP 서버 타임 아웃 설정 (0) | 2019.08.09 |
Serial 통신 클래스 (0) | 2019.07.24 |
fsync() - 파일에 쓴 데이터와 실제 하드웨어의 동기를 맞춘다 (0) | 2019.06.28 |
- Total
- Today
- Yesterday