Socket.receive blokuje się.

Socket.receive blokuje się.
  • Rejestracja: dni
  • Ostatnio: dni
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ć?

MordiJC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 28
0

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

Kopiuj
socket.setBlocking(false)

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

Kopiuj
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 :>

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.