Socket.receive blokuje się.

0

Mam w sfml2 funkcję socket.receive w wątku. Nic nie jest aktualnie wysyłane więc program leci dalej, tylko że nie da się też wysłać niz z socket.send, bo jest zablokowany przez receive który nic nie otrzymał. Jak to rozwiązać?

0

Możesz wyłączyć blokowanie socketów używając:

socket.setBlocking(false)

Bardziej wyrafinowaną metodą jest użycie SocketSelector'a:

Socket sock;
SocketSelector selector;

// Dodajemy socket do selectora
selector.add(sock);

// Gdzieś w pętli aplikacji:

// Czekamy 5 sekund na otrzymanie danych.
if(selector.wait(sf::seconds(5)))
{
	// Jakoś socket coś odebrał.

	// Pętla po kontenerze z socketami umieszczonymi w selectorze. 
	{
		if(selector.isReady(socketRef))
		{
			// Dany socket jest gotowy do odbierania.
			socket.receive(...);
		}
	}
}
else
{
	// Żaden socket z umieszczonych w selectorze nie otrzymał danych.
}

Mogłem coś pokiełbasić, bo dawno w SFML nie pisałem. W razie czego masz świetną dokumentację SFML'a :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1