пардон, вновь к сокетам) хотелось бы подцепиться с хосту, послать данные и получить ответ. я начал так-
int sock_flags = 0; int m_socket; struct sockaddr_in address;
if((m_socket=socket(AF_INET, SOCK_STREAM, 0)) == -1) return(1); if((sock_flags = fcntl(m_socket, F_GETFL, 0)) == -1) return(1); if(fcntl(m_socket, F_SETFL, sock_flags | O_NONBLOCK) == -1) return(1);
memset(&address, 0, sizeof(address)); address.sin_family = AF_INET; address.sin_port = htons(port); address.sin_addr(ip);
if (::connect(m_socket, (struct sockaddr*)&address, sizeof(address)) and errno != EINPROGRESS) return(1);
fd_set rfds, wfds; struct timeval tv; int max_fd = -1; int rc; tv.tv_sec=1; tv.tv_usec=100000; FD_ZERO(&rfds); FD_ZERO(&wfds); FD_SET(m_socket, &wfds); FD_SET(m_socket, &rfds);
if(m_socket > max_fd) max_fd = m_socket;
errno = 0; if((rc = select(max_fd + 1, &rfds, &wfds, NULL, &tv)) < 0) if (errno != EINPROGRESS) return(1); else if(!rc) return(1);
//коннектед
m_proxy_request.query= "GET http://www.google.com HTTP/1.0\n"; m_proxy_request.sented = 0; ssize_t sented;
if((sented = send(m_socket, m_proxy_request.query + m_proxy_request.sented, strlen(m_proxy_request.query) - m_proxy_request.sented, MSG_DONTWAIT)) <= 0) return(1);
//тут проверки и якобы отправили данные
ssize_t received;
memset(&m_proxy_answer, 0, sizeof m_proxy_answer);
if((received = recv(m_socket, m_proxy_answer.buf + m_proxy_answer.received, PROXY_RECV_BUFSIZE - m_proxy_answer.received, MSG_DONTWAIT)) <= 0) { fprintf(stderr, "%d recv: %s\n", __LINE__, strerror(errno)); return(1); } //а вот тут вылетает с еррором //183 recv: Resource temporarily unavailable
т.е сервер ничего не посылает или надо подождать или еще чего. сокет неблок. может из-за этого? неподскажите как победить и данные таки получить?