Accept bloquant TCP

cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005 - 29 mars 2004 à 11:54
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005 - 29 mars 2004 à 12:52
salut,

je voudrais, dans une communication TCP, que mon accept soit non bloquant !

Que puis-je faire ???
j'utilise setsockopt( sock, SOL_SOCKET, SO_RCVTIMEO, (const char *)&timeStamp, sizeof(timeStamp)); pour que rcv et connect soit non bloquant,
mais ca marche pas pour accept !

Que dois-je utiliser??
Jai vu qu'il y avait un truc qui sappelle select(),
mais les threads ca serait mieux ou pas?

Ma question est simple : select() ou thread ?

Merci beaucoup,
Sena

4 réponses

petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
29 mars 2004 à 12:37
salut je te conseil select(),
moi je l'utilise est sa marche nickel.
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
29 mars 2004 à 12:44
c'est cool je te remercie

ca te derangerai de me filer ton bout de code qui concerne le select et le accept stp? parske ce matin jai du mal...

ca serait hyper sympa.

ciao,
sena?
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
29 mars 2004 à 12:49
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

SOCKET Sserv;
SOCKET Satt;

SOCKADDR_IN sockaddrserv;
SOCKADDR_IN sockaddrclient;

int sockaddrclientsize = sizeof (struct sockaddr_in);
int clientmsgsize;
char Buffer[1024];
int port = 6666;

fd_set Ref;
fd_set Test;

void main()
{
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);

sockaddrserv.sin_family=AF_INET;
sockaddrserv.sin_addr.s_addr=INADDR_ANY;
sockaddrserv.sin_port=htons(port);

FD_ZERO(&Ref);
FD_ZERO(&Test);

Sserv = socket(AF_INET,SOCK_STREAM,0);
bind(Sserv,(SOCKADDR*)&sockaddrserv,sizeof(sockaddrserv));
listen(Sserv,0);

FD_SET(Sserv,&Ref);
Test = Ref;

for(;;)
{
select(0,&Test,NULL,NULL,NULL);

if(FD_ISSET(Sserv,&Test))
{
Satt = accept(Sserv,(struct sockaddr *)&sockaddrclient,&sockaddrclientsize); // accept le client
FD_SET(Satt,&Ref) ;

printf("\nNouveau client\n");

sprintf(Buffer,"Hello\r\n");
send(Satt,Buffer,strlen(Buffer),0);
}
else
{

clientmsgsize = recv(Test.fd_array[0],Buffer,sizeof(Buffer),0);
// Reception du message

if(clientmsgsize <= 0)
{
printf("Perte d'une connection\n");
FD_CLR(Test.fd_array[0],&Ref);
closesocket(Test.fd_array[0]);
Test = Ref;
continue;
}

Buffer[clientmsgsize] = '\0';
printf("\nrecu de %d %s",Test.fd_array[0],Buffer);
}
Test = Ref ;
}
}
0
cs_sena Messages postés 126 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 15 février 2005
29 mars 2004 à 12:52
ca cest hyper cool

merci beaucoup pour ta generosité,
yen a plus que ce que je demandais..

ciao,
sena
0
Rejoignez-nous