connect (_socket,SIGNAL (connected ()),this,SLOT (slotSocketConnected ())); connect (_socket,SIGNAL (readyRead ()),this,SLOT (slotSocketReadyRead ())); connect (_socket,SIGNAL (disconnected ()),this,SLOT (slotSocketDisconnected ())); connect (_socket,SIGNAL(error (QAbstractSocket::SocketError)),this,SLOT (slotSocketError (QAbstractSocket::SocketError))); _socket->connectToHost(ip,port,QIODevice::ReadWrite); _socket->waitForConnected (1000); if (_socket->state() == QAbstractSocket::UnconnectedState) { ...... }
C++ (Qt)void ClassName::createConnection( ... ){ _socket = new QTcpSocket(...); connect (_socket,SIGNAL (connected ()),this,SLOT (slotSocketConnected ())); connect (_socket,SIGNAL (readyRead ()),this,SLOT (slotSocketReadyRead ())); connect (_socket,SIGNAL (disconnected ()),this,SLOT (slotSocketDisconnected ())); connect (_socket,SIGNAL(error (QAbstractSocket::SocketError)),this,SLOT (slotSocketError (QAbstractSocket::SocketError))); _socket->connectToHost(ip,port,QIODevice::ReadWrite);}
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/tcp.h>....// эти строки надо написать после того,как сокет перейдет в состояние конектед,потому как до этого setsockopt ругается на плохой дескриптор,что можно понять. int optval; socklen_t optlen = sizeof(optval); optval = 1; setsockopt(_socket->socketDescriptor(), SOL_SOCKET, TCP_KEEPIDLE, &optval, optlen); // Это строкой я устанавливаю интервал tcp_keepalive_time на 1 сек setsockopt(_socket->socketDescriptor(), SOL_SOCKET, SO_KEEPALIVE, &optval, optlen); // этой строкой врубаю SO_KEEPALIVE