LINUX.ORG.RU

Linux, socket


0

0

Пожадуйста, подскажите! клиент устанавливает с сервером _соединение_, потом надо оборвать это соединение на стороне клиента так чтобы сервер об не этом узнал. Какие будут предложения??? У меня есть идея менять динамически настройки на firewall

А зачем?
Ну сделаешь closesocket без shutdown, так соединение все равно по таймауту отвалится.

Havoc ★★★★
()
Ответ на: комментарий от Havoc

тоесть если я сделаю как ты сказал ОС клиента разьве не пошлет серверу сообщение что соединение прерванно???

big_nikita
() автор топика
Ответ на: комментарий от Antichrist

так вот он и не должен узнать о том что соединение разорванно пока у него не выйдет timeout а пока не выйдет он же будет посылать запрошенную ин-фу!

big_nikita
() автор топика

>тоесть если я сделаю как ты сказал ОС клиента разьве не пошлет
>серверу сообщение что соединение прерванно???

Не уверен. Но например клиент упадет, тогда точно никто ничего не пошлет.

>так вот он и не должен узнать о том что соединение разорванно пока у
>него не выйдет timeout а пока не выйдет он же будет посылать
>запрошенную ин-фу!

Щас, послать то он попытается, но у него ничего из этого не получится, и закроет со своей стороны сокет.

Зачем это нужно, не понятно совершенно. Не нужно соединение, UDP юзай.

Havoc ★★★★
()
Ответ на: комментарий от Havoc

Нужно это для того что бы с эмулировать DoS атаку. А послать сервер сможет, как мне кажется, несколько пакетов пока не поймет что ему никто не отвечает

big_nikita
() автор топика

Несколько пакетов он дейсвительно пошлет, а сколько - зависит от 
размеров "скользящего окна" в механизме квитирования.

anonymous
()

close() and shutdown()--Get outta my face!
Whew! You've been send()'ing and recv()'ing data all day long, and you've had it. You're ready to close the connection on your socket descriptor. This is easy. You can just use the regular Unix file descriptor close() function:
close(sockfd);
This will prevent any more reads and writes to the socket. Anyone attempting to read or write the socket on the remote end will receive an error.

Just in case you want a little more control over how the socket closes, you can use the shutdown() function. It allows you to cut off communication in a certain direction, or both ways (just like close() does.) Synopsis:

int shutdown(int sockfd, int how);
sockfd is the socket file descriptor you want to shutdown, and how is one of the following:
0 - Further receives are disallowed
1 - Further sends are disallowed
2 - Further sends and receives are disallowed (like close())

shutdown() returns 0 on success, and -1 on error (with errno set accordingly.)

If you deign to use shutdown() on unconnected datagram sockets, it will simply make the socket unavailable for further send() and recv() calls (remember that you can use these if you connect() your datagram socket.)

Nothing to it.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.