int TCPSocket::read(LPVOID data, int buf_sz) { if (LISTENER) return -1; //printf("IN TCPSocket::read()\n"); return ReadSocket(sock, data, buf_sz); }
LWPR::SOCKET_RET_TYPE_E Socket::ReadSocket(SOCKET_FD_T fd, char* buf, int length) { return ReadSocket(fd, buf, length, INT_MAX); }
LWPR::SOCKET_RET_TYPE_E Socket::ReadSocket(SOCKET_FD_T fd, LWPR::Buffer& buf, int length) { buf.Size(length); return ReadSocket(fd, buf.Inout(), length, INT_MAX); }
void XYTCPSocketLayer::ConnectToServer() { if(_stat != States_Disconnected) { return; } _stat = States_Connecting; pthread_mutex_lock(&_mutex); if(_stat != States_Connecting) { return; } if(_IsReadThreadRunning) { _IsReadThreadRunning = false; usleep(10000); } struct sockaddr_in servaddr; _fd = socket(AF_INET, SOCK_STREAM, 0); if(_fd < 0) { _stat = States_Disconnected; //dispatch error msg onError(XYNetworkErrorCode(XYNetworkErrorCode::eXYNetworkErrorCode::CREATE_SOCKET_ERROR)); return; } //no SIGPIPE int set = 1; setsockopt(_fd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int)); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(_port); inet_pton(AF_INET, _host.c_str(), &servaddr.sin_addr); if(connect(_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0) { _stat = States_Disconnected; //dispatch connect error onError(XYNetworkErrorCode(XYNetworkErrorCode::eXYNetworkErrorCode::CONNECT_ERROR)); return; } _stat = States_Connected; _IsReadThreadRunning = true; pthread_mutex_unlock(&_mutex); XYThreadManager::ShareIntance()->Start(); //callback onConnect(); //read schedule ReadSocket(); return; }