|
글번호 35581에 대한 답변을 임프님께서 (글 35612) 해 주셨는데 그건 ClientSocket 컴포넌트로 통신할때
해당 하더라구요. (제 소스에 적용하니까 컴파일 에러 납니다.)
임프님께서 답변해주신 내용이 많아서 파일로 따로 추가했습니다.
저는 winsock2 으로 아래내용처럼 클래스를 만들어서 소켓통신을 하고 있습니다.
연결이 안되는 IP로 접속을 시도하면 핸들수가 계속 증가합니다.
하루에 3000 ~ 4000 개가 넘어서 결국 서버가 다운됩니다.
접속은 아래처럼 하구요.
이주일째 해결 못하고 해당 업체에서 계속 압박하는데 정말 힘드네요.
제발 아시는분 도와주십시요.
cli[n].cli_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
cli[n].cli_addr.sin_family = AF_INET;
cli[n].cli_addr.sin_addr.s_addr = inet_addr(szipaddr); // IP
cli[n].cli_addr.sin_port = htons(nport); // PORT
if( connect(cli[n].cli_sock, (LPSOCKADDR)&cli[n].cli_addr, sizeof(cli[n].cli_addr)) < 0)
{
생략
}
<헤더파일 winsock >
#include <winsock2.h>
struct stClient
{
int in_use;
SOCKET cli_sock;
struct sockaddr_in cli_addr;
};
extern stClient cli[MAX_CLIENT];
class cSockUtil
{
private:
struct sockaddr_in srv_addr;
char m_szDebugBuf[1024];
int svr_conn;
timeval tout;
fd_set fd_read, fd_write, fd_except, fd_conn;
HANDLE m_hwnd;
protected:
public:
int cli_conn;
cSockUtil();
~cSockUtil();
void open_sock();
int connect_sock(char *szipaddr, int nport, int n);
int close_sock(int s);
void close_all_sock();
void read_sock(int s);
void check_write_sock(char *buf, int len);
void write_sock(int s, char *buf, int len);
void check_write_sock_Ctrl(int nsock, char *buf, int len);
};
//---------------------------------------------------------------------------
|