2012-09-27 5 views
5

Mam napisany serwer sterowany zdarzeniami (protokół odpowiedzi żądania - HTTP like) za pomocą nieblokujących gniazd. Testowałem częściowe odczyty, pisząc klienta, który wysyła żądanie w oddzielnych porcjach co kilka sekund. W jaki sposób przetestować częściowe zapisy, tj. Muszę napisać 100 bajtów, a następnie wysłać zwroty połączeń z tylko 10 bajtami.Jak wymusić częściowe zapisy, aby przetestować serwer sieciowy

Piszę klientów bazujących na Perlu. To jest przez SSL, ale dla celów tego pytania, jestem OK z częściowymi zapisami na TCP.

Odpowiedz

0

Sterowanie przepływem TCP - spraw, aby klient był czytany z gniazda bardzo powoli, aby bufor wysyłający gniazda (serwer) wypełniał dane.

2

Spróbuj zmniejszyć rozmiar bufora wyjściowego:

err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1) 

ten powinien uczynić wysłać wyjście tylko część bufora.

0

Napisz bardzo dużo danych.

Bądź bufor wyjściowy bardzo mały (jak sugeruje Jan)

lub

Stwórz własną funkcję wysyłania

przykład

ssize_t mysend(int sockfd, const void *buf, size_t len, int flags) 
{ 
    int shortlen = len - 100 > 0 ? len - 100; len 
    return send(sockfd, buf, shortlen, flags); 
} 

Który zawsze wyśle ​​100 bajtów krótkich, chyba że wysłanie < 100 bajtów. W przeciwnym razie wyśle ​​to, co dasz, jeśli to możliwe. Po zweryfikowaniu, że obsługa częściowego wysyłania działa poprawnie, zmień połączenie na mysend z powrotem na zwykłe wysyłanie i usuń moje wiadomości z kodu hackarnego.

Powiązane problemy