jagstang Pa Capona ಠ_ಠ | voilà.
création socket
Code :
- bool DahuSocks::Connect(const string &ip, const unsigned int port)
- {
- sin.sin_addr.s_addr = inet_addr(ip.c_str());
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- sock = socket(AF_INET,SOCK_STREAM,0);
- if (connect(sock, (SOCKADDR *)&sin, sizeof(sin)) != SOCKET_ERROR)
- isConnected = true ;
- // socket option
- int on = 1 ;
- if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, ( const char* ) &on, sizeof ( on ) ) == -1 )
- isConnected = false;
- /*int buffSize = BUFFERSIZE ;
- if (setsockopt (sock, SOL_SOCKET, SO_RCVBUF, (const char *) &buffSize, sizeof (buffSize) ) == -1 )
- isConnected = false;
- */
- // bind
- //if (bind(sock, (SOCKADDR *)&sin, sizeof(sin)) != SOCKET_ERROR)
- // cout << "erreur bind" ;
- // maximum time to wait
- fd_set a ;
- a.fd_array[0] = sock ;
- a.fd_count = 1 ;
- timeval b ;
- b.tv_sec = 2 ;
- b.tv_usec = 200 ;
- select(0, &a, &a, &a, &b) ;
- // socket non bloquante
- /*u_long argp=1;
- ioctlsocket(sock, FIONBIO, &argp) ;
- if (argp == 0)
- return false ;
- */
- return isConnected ;
- }[code]
- string DahuSocks::Recv(bool multiline)
- {
- char mbuffer [BUFFERSIZE+1] ;
- string sbuffer="" ;
- int errcode=0 ;
- int i=0 ;
- long downloaded=0 ;
- char bspace[] = {8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0 } ;
- char wait[] = {'|', '/', '-', '\\'} ;
- do
- {
- WSASetLastError(0) ;
- memset(mbuffer, 0, BUFFERSIZE) ;
- errcode = recv(sock, mbuffer, BUFFERSIZE, 0) ;
- sbuffer.append(mbuffer) ;
- #ifdef DEBUG
- //cout << "\nWSA :" << WSAGetLastError() ;
- //cout << "\nerrcode : " << errcode ;
- #endif
- downloaded += errcode ;
- if (i++>0)
- cout << bspace << wait[i%4] << " " << downloaded << " bytes" ;
- }
- while (errcode == BUFFERSIZE && WSAGetLastError()==0) ;
- if (i>1)
- {
- cout << bspace ;
- cout << downloaded << " bytes OK" ;
- }
- return sbuffer ;
- }
|
le problèmest est que parfois le buffer n'est pas plein. Donc la boucle s'arrête est le message est tronqué
Je précise que j'utilise ceci pour récupérer un mail sur un serveur POP. Message édité par jagstang le 17-01-2004 à 15:23:36
|