static int prNetAddr_Disconnect(VMGlobals *g, int numArgsPushed) { PyrSlot* netAddrSlot = g->sp; PyrObject* netAddrObj = slotRawObject(netAddrSlot); SC_TcpClientPort *comPort = (SC_TcpClientPort*)slotRawPtr(netAddrObj->slots + ivxNetAddr_Socket); if (comPort) comPort->Close(); return errNone; }
int prNetAddr_Connect(VMGlobals *g, int numArgsPushed) { PyrSlot* netAddrSlot = g->sp; PyrObject* netAddrObj = netAddrSlot->uo; int err, port, addr; err = slotIntVal(netAddrObj->slots + ivxNetAddr_PortID, &port); if (err) return err; err = slotIntVal(netAddrObj->slots + ivxNetAddr_Hostaddr, &addr); if (err) return err; struct sockaddr_in toaddr; makeSockAddr(toaddr, addr, port); int aSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (aSocket == -1) { //post("\nCould not create socket\n"); return errFailed; } const int on = 1; #ifdef SC_WIN32 if (setsockopt( aSocket, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)) != 0) { #else if (setsockopt( aSocket, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on)) != 0) { #endif //post("\nCould not setsockopt TCP_NODELAY\n"); #ifdef SC_WIN32 closesocket(aSocket); #else close(aSocket); #endif return errFailed; }; if(connect(aSocket,(struct sockaddr*)&toaddr,sizeof(toaddr)) != 0) { //post("\nCould not connect socket\n"); #ifdef SC_WIN32 closesocket(aSocket); #else close(aSocket); #endif return errFailed; } SC_TcpClientPort *comPort = new SC_TcpClientPort(aSocket, netAddrTcpClientNotifyFunc, netAddrObj); SetPtr(netAddrObj->slots + ivxNetAddr_Socket, comPort); return errNone; } int prNetAddr_Disconnect(VMGlobals *g, int numArgsPushed); int prNetAddr_Disconnect(VMGlobals *g, int numArgsPushed) { PyrSlot* netAddrSlot = g->sp; PyrObject* netAddrObj = netAddrSlot->uo; SC_TcpClientPort *comPort = (SC_TcpClientPort*)(netAddrObj->slots + ivxNetAddr_Socket)->uptr; if (comPort) comPort->Close(); return errNone; }