OVH Cloud OVH Cloud

ServerSocket et linux

5 réponses
Avatar
Jerome
Bonsoir, j'ai un problème très étrange.
Je créé une ServerSocket, sous windows il n'y a aucun problème, la socket
s'ouvre tout de suite.
Par contre sous linux, il me faut attendre environ 4 ou 5 minutes avant que
la socket s'ouvre.
J'ai essayé en coupant mon firewall, en ouvrant le port, en changeant de
version du jdk ... Enfin j'ai tout
essayé :)
Si c'est dejà arrivé à quelqu'un ...
Voici le code :

import java.io.* ;
import java.net.* ;

public class Server {

ServerSocket ssock ;
InetAddress iaddr ;

public Server (int port) {

try {
ssock = new ServerSocket(port) ;
} catch (IOException ioe) {
System.out.println("Impossible d'ouvrir la socket sur le port " + port) ;
} finally {
System.out.println("Socket ouverte") ;
}


try {
ssock.accept() ;
} catch (IOException ioe) {
System.out.println("Erreur d'entrée/sortie") ;
} finally {
iaddr = ssock.getInetAddress() ;
System.out.println(iaddr.getHostAddress()) ;
}

try {
ssock.close() ;
} catch (IOException ioe) {
System.out.println("Impossible de fermer la socket") ;
} finally {
System.out.println("Socket fermee") ;
}

}

public static void main (String args[]) {

Server serv = new Server (25000) ;

}

}

Merci d'avance.

Jérôme

5 réponses

Avatar
Fabien
Au premier démarrage du prog, l'ouverture de la socket doit être
instantannée, par contre le problème que tu décris peux apparaître
lorsque tu arrêtes le serveur et que tu le relances...
En effet, c'est dû à une fonctionnalité du noyau Linux qui protège le
système contre l'attaque en SYN Cookie.

A part ça, je ne vois pas...

@+ Fabien

Jerome wrote:
Bonsoir, j'ai un problème très étrange.
Je créé une ServerSocket, sous windows il n'y a aucun problème, la socket
s'ouvre tout de suite.
Par contre sous linux, il me faut attendre environ 4 ou 5 minutes avant que
la socket s'ouvre.
J'ai essayé en coupant mon firewall, en ouvrant le port, en changeant de
version du jdk ... Enfin j'ai tout
essayé :)
Si c'est dejà arrivé à quelqu'un ...
Voici le code :

import java.io.* ;
import java.net.* ;

public class Server {

ServerSocket ssock ;
InetAddress iaddr ;

public Server (int port) {

try {
ssock = new ServerSocket(port) ;
} catch (IOException ioe) {
System.out.println("Impossible d'ouvrir la socket sur le port " + port) ;
} finally {
System.out.println("Socket ouverte") ;
}


try {
ssock.accept() ;
} catch (IOException ioe) {
System.out.println("Erreur d'entrée/sortie") ;
} finally {
iaddr = ssock.getInetAddress() ;
System.out.println(iaddr.getHostAddress()) ;
}

try {
ssock.close() ;
} catch (IOException ioe) {
System.out.println("Impossible de fermer la socket") ;
} finally {
System.out.println("Socket fermee") ;
}

}

public static void main (String args[]) {

Server serv = new Server (25000) ;

}

}

Merci d'avance.

Jérôme




Avatar
Adam Guillot
Fabien wrote:
Au premier démarrage du prog, l'ouverture de la socket doit être
instantannée, par contre le problème que tu décris peux apparaître
lorsque tu arrêtes le serveur et que tu le relances...
En effet, c'est dû à une fonctionnalité du noyau Linux qui protège le
système contre l'attaque en SYN Cookie.

A part ça, je ne vois pas...

@+ Fabien

Jerome wrote:

Bonsoir, j'ai un problème très étrange.
Je créé une ServerSocket, sous windows il n'y a aucun problème, la
socket s'ouvre tout de suite.
Par contre sous linux, il me faut attendre environ 4 ou 5 minutes
avant que la socket s'ouvre.
J'ai essayé en coupant mon firewall, en ouvrant le port, en changeant
de version du jdk ... Enfin j'ai tout
essayé :)
Si c'est dejà arrivé à quelqu'un ...
Voici le code :

import java.io.* ;
import java.net.* ;

public class Server {

ServerSocket ssock ;
InetAddress iaddr ;

public Server (int port) {

try {
ssock = new ServerSocket(port) ;
} catch (IOException ioe) {
System.out.println("Impossible d'ouvrir la socket sur le port " +
port) ;
} finally {
System.out.println("Socket ouverte") ;
}


try {
ssock.accept() ;
} catch (IOException ioe) {
System.out.println("Erreur d'entrée/sortie") ;
} finally {
iaddr = ssock.getInetAddress() ;
System.out.println(iaddr.getHostAddress()) ;
}

try {
ssock.close() ;
} catch (IOException ioe) {
System.out.println("Impossible de fermer la socket") ;
} finally {
System.out.println("Socket fermee") ;
}

}

public static void main (String args[]) {

Server serv = new Server (25000) ;

}

}

Merci d'avance.

Jérôme




Tu utilise le kernel standard d'une distro ? Parce que comme le disait
Fabien a part le SYN cookie, ca doit etre instantané. Le seul moyen que
j'ai pour fermer le programme c'est Control+C, dont socket.close() n'est
pas appeler. Il faudrait que ton socket soi fermer correctement pour
redemarrer tout de suite. sinon desactive syn cookie.


Avatar
Jerome
"Adam Guillot" a écrit dans le
message de news: 41972a4a$0$13765$
Fabien wrote:
Au premier démarrage du prog, l'ouverture de la socket doit être
instantannée, par contre le problème que tu décris peux apparaître
lorsque tu arrêtes le serveur et que tu le relances...
En effet, c'est dû à une fonctionnalité du noyau Linux qui protège le
système contre l'attaque en SYN Cookie.

A part ça, je ne vois pas...

@+ Fabien

Jerome wrote:

Bonsoir, j'ai un problème très étrange.
Je créé une ServerSocket, sous windows il n'y a aucun problème, la
socket s'ouvre tout de suite.
Par contre sous linux, il me faut attendre environ 4 ou 5 minutes avant
que la socket s'ouvre.
J'ai essayé en coupant mon firewall, en ouvrant le port, en changeant de
version du jdk ... Enfin j'ai tout
essayé :)
Si c'est dejà arrivé à quelqu'un ...
Voici le code :

import java.io.* ;
import java.net.* ;

public class Server {

ServerSocket ssock ;
InetAddress iaddr ;

public Server (int port) {

try {
ssock = new ServerSocket(port) ;
} catch (IOException ioe) {
System.out.println("Impossible d'ouvrir la socket sur le port " +
port) ;
} finally {
System.out.println("Socket ouverte") ;
}


try {
ssock.accept() ;
} catch (IOException ioe) {
System.out.println("Erreur d'entrée/sortie") ;
} finally {
iaddr = ssock.getInetAddress() ;
System.out.println(iaddr.getHostAddress()) ;
}

try {
ssock.close() ;
} catch (IOException ioe) {
System.out.println("Impossible de fermer la socket") ;
} finally {
System.out.println("Socket fermee") ;
}

}

public static void main (String args[]) {

Server serv = new Server (25000) ;

}

}

Merci d'avance.

Jérôme




Tu utilise le kernel standard d'une distro ? Parce que comme le disait
Fabien a part le SYN cookie, ca doit etre instantané. Le seul moyen que
j'ai pour fermer le programme c'est Control+C, dont socket.close() n'est
pas appeler. Il faudrait que ton socket soi fermer correctement pour
redemarrer tout de suite. sinon desactive syn cookie.


Syncookie est dejà desactivé ...



Avatar
Jerome
"Adam Guillot" a écrit dans le
message de news: 41972a4a$0$13765$
Fabien wrote:
Au premier démarrage du prog, l'ouverture de la socket doit être
instantannée, par contre le problème que tu décris peux apparaître
lorsque tu arrêtes le serveur et que tu le relances...
En effet, c'est dû à une fonctionnalité du noyau Linux qui protège le
système contre l'attaque en SYN Cookie.

A part ça, je ne vois pas...

@+ Fabien

Jerome wrote:

Bonsoir, j'ai un problème très étrange.
Je créé une ServerSocket, sous windows il n'y a aucun problème, la
socket s'ouvre tout de suite.
Par contre sous linux, il me faut attendre environ 4 ou 5 minutes avant
que la socket s'ouvre.
J'ai essayé en coupant mon firewall, en ouvrant le port, en changeant de
version du jdk ... Enfin j'ai tout
essayé :)
Si c'est dejà arrivé à quelqu'un ...
Voici le code :

import java.io.* ;
import java.net.* ;

public class Server {

ServerSocket ssock ;
InetAddress iaddr ;

public Server (int port) {

try {
ssock = new ServerSocket(port) ;
} catch (IOException ioe) {
System.out.println("Impossible d'ouvrir la socket sur le port " +
port) ;
} finally {
System.out.println("Socket ouverte") ;
}


try {
ssock.accept() ;
} catch (IOException ioe) {
System.out.println("Erreur d'entrée/sortie") ;
} finally {
iaddr = ssock.getInetAddress() ;
System.out.println(iaddr.getHostAddress()) ;
}

try {
ssock.close() ;
} catch (IOException ioe) {
System.out.println("Impossible de fermer la socket") ;
} finally {
System.out.println("Socket fermee") ;
}

}

public static void main (String args[]) {

Server serv = new Server (25000) ;

}

}

Merci d'avance.

Jérôme




Tu utilise le kernel standard d'une distro ? Parce que comme le disait
Fabien a part le SYN cookie, ca doit etre instantané. Le seul moyen que
j'ai pour fermer le programme c'est Control+C, dont socket.close() n'est
pas appeler. Il faudrait que ton socket soi fermer correctement pour
redemarrer tout de suite. sinon desactive syn cookie.


Sinon j'utilise un kernel 2.6.7 et je n'ai jamais eu de problème de ce genre
...
Et dès la première fois que j'ai essayé j'ai eu ce problème ...



Avatar
Vincent Cantin
J'ai telephone a l'assistance microsoft, ils m'ont dit qu'il fallait
redemarrer linux ;-)