J'ai le code suivant:Comment relier une socket dans MacOSX/Ubuntu? Une deuxième fois
if ((m_mainSocket = ::socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
throw Exception(__FILE__, __LINE__) << "Unable to create socket";
}
int on(0);
if (setsockopt(m_mainSocket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)))
{
throw Exception(__FILE__, __LINE__) << "Can't make server socket resusable.";
}
sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(p_localPort);
if (::bind(m_mainSocket, reinterpret_cast< sockaddr * >(&addr), sizeof(addr)) < 0)
{
throw Exception(__FILE__, __LINE__) << "Failed to bind the server socket";
}
Quand je ferme le serveur, avec près(), de couse, je ne peux pas ouvrir à nouveau le serveur dans le même port. Pourquoi? J'ai besoin de changer le port OU redémarrer le système. Cela n'arrive que dans Ubuntu ET MacOSX. Dans Windows, je n'ai pas ce problème.
L'erreur s'est produite dans la fonction :: bind(). Cela ne me permet pas de re-bind() une socket deux fois.
Comment se reconnecter?
Merci! Je l'ai fait. Cela a fonctionné parfaitement pour MacOS, MAIS Ubuntu a toujours le même problème. Rien n'a changé. –