Fonction non bloquante sous telnet - C - Programmation
Marsh Posté le 09-06-2004 à 19:45:16
Pour les sockets, j'ai déjà fait comme ça :
int opts;
opts = fcntl (ta_socket, F_GETFL);
if (opts < 0) return;
opts = (opts | O_NONBLOCK);
fcntl (ta_socket, F_SETFL, opts);
edit: J'avais pas fait gaffe que ça tourne sous DOS. Ca fonctionne sous linux ma méthode. Sous DOS je ne peux pas confirmer
Marsh Posté le 10-06-2004 à 10:04:42
Merci d'abord pour ta réponse,
Je ne connaissait pas du tout cette fonction avant, pourrais tu m'en dire un peu plus STP .
Genre le pointeur sur la structure,"this"? et "fd"?
merci
Marsh Posté le 10-06-2004 à 10:45:59
Autant pour moi ça vient du copier coller.
C'est en fait le descripteur de ta socket.
(Le code venait d'une classe...)
Marsh Posté le 10-06-2004 à 11:04:14
Erreur de compil,
Il ne reconnait pas les cstes O_NONBLOCK et F_GETFL . Pourtant j'ai inclus <unistd.h> et <fcntl.h>.
Ca me parrais mal barré!!!
Marsh Posté le 10-06-2004 à 11:40:27
sinon ya pas des fonctions dans tcp.h? qui pourrait faire la même chose?
Marsh Posté le 10-06-2004 à 12:24:52
Sans doute que ça n'existe que sous linux.
=> http://joshua.raleigh.nc.us/docs/l [...] 69.html#15
#define O_NONBLOCK 04000
en ligne 15
Vérifie si tu c'est défini dans ton fichier inclus
Marsh Posté le 10-06-2004 à 13:35:15
ya pas !!!
C'est pas grave, je pense avoir une notre solution.
Pendant l'attente j'execute mes autres fontions. (a l'intérieur du while).
merci pour tes renseignements.
tcho
Marsh Posté le 10-06-2004 à 13:39:19
Quand tu dis sous DOS, c'est vraiment sous dos ou c'est une session CMD sous windows ?
parcequ'à ce moment là ça doit être ioctlsocket() pour rendre la socket non bloquante.
Marsh Posté le 10-06-2004 à 13:57:54
non c'est vraiment sous dos,
En fait je télécharge mon executable sur une cible.(proc 486sx )
En plus de la fonction telnet, le programme gère d'autres fonctions.
Marsh Posté le 09-06-2004 à 17:46:23
Salut,
Je travaille en ce moment sur un serveur telnet. Le problème c'est qu'il faut que je fasse une attente non bloquante.
Ce serveur fonctionne sous DOS.
Pour l'instant voila le code:
do {
tcp_listen( s, port, 0L, 0, NULL, 0 );
while ( ! sock_established( s )) {
if ( tcp_tick( s ) == NULL ) goto retry;
delay( 250 );
}
/* we are connected */
t->teld_connected = 1;
t->teld_iostate = IO_ST_INIT;
sock_mode( s, TCP_MODE_NONAGLE );
send_iac( t, TEL_WILL, OPT_ECHO );
return( t );
retry:
sock_abort( s );
} while ( 1 );
J'ai essayé de faire un "if" sur sock_established(s) mais ca ne marche pas .
Je m'explique:
Je teste si la socket est établie puis je traite la suite.
Mais ca ne marche pas .
Existe t'il d'autres procédures ou d'autres fonction non-bloquante?
merci.