У меня есть неблокирующий сокет (сокет TCP или UPD) с использованием kqueue / epoll (FreeBSD / Linux). Когда я хочу передать байты другой стороне, я могу использовать write / send / sendto. Каждый из них использует char * buffer для передачи, но я не понимаю, когда мне нужно освободить память буфера после вызова write / send / sendto.
- Правильно ли, что если при записи / отправке / отправке возвращается количество принятых байтов и это число равно размеру буфера, я могу немедленно освободить память буфера? Или я должен ждать событий EVFILT_WRITE (kqueue) или EPOLLOUT (Linux), чтобы освободить память буфера?
- Правильно ли, что при записи / отправке / отправке возвращается количество принятых байтов, и это число не равноРазмер буфера, я могу освободить только байты, принятые немедленно, и я должен ждать событий EVFILT_WRITE (kqueue) или EPOLLOUT (Linux), чтобы продолжить передачу непринятых байтов и следующих байтов? Или я должен ждать событий EVFILT_WRITE (kqueue) или EPOLLOUT (Linux), чтобы освободить память буфера и передать следующие байты?
- Правильно ли, что при записи / отправке / отправке возвращается EAGAIN (kqueue) или EAGAIN ||EWOULDBLOCK (Linux), я не могу освободить память буфера и мне приходится ждать события EVFILT_WRITE (kqueue) или EPOLLOUT (Linux), чтобы повторно передать те же байты?