jserv@venux:~$ dpkg -L xtrans-dev /usr/include/X11/Xtrans/transport.c /usr/include/X11/Xtrans/Xtrans.c /usr/include/X11/Xtrans/Xtrans.h /usr/include/X11/Xtrans/Xtransdnet.c /usr/include/X11/Xtrans/Xtransint.h /usr/include/X11/Xtrans/Xtranslcl.c /usr/include/X11/Xtrans/Xtransos2.c /usr/include/X11/Xtrans/Xtranssock.c /usr/include/X11/Xtrans/Xtranstli.c /usr/include/X11/Xtrans/Xtransutil.c與平台相關的部份是 Xtranssock.c ,其內部實做如下:
static XtransConnInfo
TRANS(SocketINETAccept) (XtransConnInfo ciptr, int *status)
{
...
XtransConnInfo newciptr;
struct sockaddr_in sockname;
int namelen = sizeof(sockname);
if ((newciptr = (XtransConnInfo) xcalloc (
1, sizeof(struct _XtransConnInfo))) == NULL)
{
*status = TRANS_ACCEPT_BAD_MALLOC;
return NULL;
}
if ((newciptr->fd = accept (
ciptr->fd,
(struct sockaddr *) &sockname,
(void *)&namelen)) < 0)
{
xfree (newciptr);
*status = TRANS_ACCEPT_FAILED;
return NULL;
}
#ifdef TCP_NODELAY
{
/*
* turn off TCP coalescence for INET sockets
*/
int tmp = 1;
setsockopt (newciptr->fd,
IPPROTO_TCP, TCP_NODELAY,
(char *) &tmp, sizeof (int));
}
#endif
[[200 OK]: A Port80 Software Blog] 有篇 [TCP_NODELAY: To Nagle or Not To Nagle?] 可作為參考。所以[Boost socket performance on Linux]中的第一個技巧原因說明==> If the user were required to fill a segment with typed characters before the packet was sent, the experience would be less than desirable. 其實這句話並不真確,說的好像客戶端程式不會在未填滿segment前送出似的,不過Nagle演算法會造成以小packet傳輸為主的應用程式有較長的延遲倒是無庸置疑(因為要等ACK)
由 reborn2266 發表於 February 7, 2006 01:45 PM