bool CPeerBase::Accept(socket_t fd_accept) { struct sockaddr_in peer; if ((m_fd = socket_accept(fd_accept, &peer)) == INVALID_SOCKET) { Destroy(); return false; } //socket_block(m_fd); socket_sndbuf(m_fd, 233016); socket_rcvbuf(m_fd, 233016); strlcpymt(m_host, inet_ntoa(peer.sin_addr), sizeof(m_host)); m_outBuffer = buffer_new(DEFAULT_PACKET_BUFFER_SIZE); m_inBuffer = buffer_new(MAX_INPUT_LEN); if (!m_outBuffer || !m_inBuffer) { Destroy(); return false; } fdwatch_add_fd(m_fdWatcher, m_fd, this, FDW_READ, false); OnAccept(); sys_log(0, "ACCEPT FROM %s", inet_ntoa(peer.sin_addr)); return true; }
socket_t socket_connect(const char* host, WORD port) { socket_t s = 0; struct sockaddr_in server_addr; int rslt; /* 소켓주소 구조체 초기화 */ memset(&server_addr, 0, sizeof(server_addr)); if (isdigit(*host)) server_addr.sin_addr.s_addr = inet_addr(host); else { struct hostent *hp; if ((hp = gethostbyname(host)) == NULL) { sys_err("socket_connect(): can not connect to %s:%d", host, port); return -1; } thecore_memcpy((char* ) &server_addr.sin_addr, hp->h_addr, sizeof(server_addr.sin_addr)); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(port); if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); return -1; } socket_keepalive(s); socket_sndbuf(s, 233016); socket_rcvbuf(s, 233016); socket_timeout(s, 10, 0); socket_lingeron(s); /* 연결요청 */ if ((rslt = connect(s, (struct sockaddr *) &server_addr, sizeof(server_addr))) < 0) { socket_close(s); #ifdef __WIN32__ switch (WSAGetLastError()) #else switch (rslt) #endif { #ifdef __WIN32__ case WSAETIMEDOUT: #else case EINTR: #endif sys_err("HOST %s:%d connection timeout.", host, port); break; #ifdef __WIN32__ case WSAECONNREFUSED: #else case ECONNREFUSED: #endif sys_err("HOST %s:%d port is not opened. connection refused.", host, port); break; #ifdef __WIN32__ case WSAENETUNREACH: #else case ENETUNREACH: #endif sys_err("HOST %s:%d is not reachable from this host.", host, port); break; default: sys_err("HOST %s:%d, could not connect.", host, port); break; } perror("connect"); return (-1); } return (s); }