LinuxÉÏTCP¶ªÊ§Ð¡°ü²»¿É¼ûµÄ½â¾ö
LinuxÉÏTCP¶ªÊ§Ð¡°ü²»¿É¼ûµÄ½â¾ö
×÷ÕߣºÇ§Àï¹ÂÐÐ(http://blog.csdn.net/yanghehong)
ÓÐÍøÓÑÔÚ×öÒ»¸öLinuxÉϵĿͻ§¶ËÅöµ½ÕâÑùµÄÎÊÌ⣺
ÎÒÃÇÔÚLinuxÏ¿ª·¢Ò»¸öÍøÂç¿Í»§¶Ë³ÌÐò£¨·þÎñÆ÷ÊDz»¿ÉÐ޸ĵģ©£¬²»¶ÏÏò·þÎñÆ÷²»¶¨ÆÚ·¢ËÍһЩºÜСµÄ°ü£¨Ò»°ãÖ»Óм¸Ê®×Ö½Ú£©£¬ÏÖÔÚ³öÏÖÕâÖÖÇé¿ö£º´ó²¿·Ö°üÕý³£·¢ËÍ£¬µ«Êǵ±ÎÞÏßModem¶Ï¿ªµÄʱºò£¬Èç¹ûÕâ¸öʱºò¸ÕºÃÓÐÒ»¸öС°ü£¬¾Í¿ÉÄܶªÊ§£¬µ«ÔÚ³ÌÐòÖÐÈ´ÏÔʾÒѾ·¢Ëͳɹ¦£¬µ¼Ö¶ª°ü¡£
ÎÒÃÇ·ÖÎöÔÒòÊÇÕâÑù£º
1£ºÖ÷³ÌÐò´´½¨Socket£¬TCP/IP·½Ê½£¬²¢²ÉÓÃStream·½Ê½
2£ºÖ÷³ÌÐòµ÷ÓÃWrite£¬Ð´ÈëС°üµ½ÏµÍ³µÄSocket»º³åÇø£¬²¢·µ»Ø³É¹¦Ð´È룬ÓÉÓÚ×Ö½ÚÊýºÜС£¬ËùÒÔÒ»°ã¶¼Á¢¼´·µ»ØÐ´Èë³É¹¦£¡
3£ºLinux TCP/IPÐÒéÕ»°ÑSocket»º³åÇøÊý¾Ý·¢Ë͵½·þÎñÆ÷
Èç¹ûµÚ¶þ²½Íê³É£¬¸ÕºÃÔÚµÚÈý²½³öÏÖÎÞÏßModem¶Ï¿ªµÄÇé¿ö£¬¾Í»áµ¼ÖÂÖ÷³ÌÐòÒÔΪÒѾ·¢Ëͳɹ¦ÁË£¬µ«·þÎñÆ÷ÊÕ²»µ½µÄÇé¿ö¡£
ÎÒÃÇÔÚÍøÂçÉÏËÑË÷ÁË´óÁ¿µÄ×ÊÁÏ£¬µ«ÊÇûÓÐÕÒµ½×îÖյĽâ¾ö·½°¸£¬Ò»°ã¶¼ÊÇÒªÇóÐÞ¸ÄÐÒ飬¼ÓÉ϶ÔС°üµÄACK´¦Àí£¬µ«ÎÒÃÇÕâ±ßÎÞ·¨¿ØÖÆ·þÎñÆ÷¡£
ÎÒÃÇÒ²ÊÔ×Å¿ØÖÆKeepAliveºÍNoDelay£¬µ«»¹ÊÇûЧ¹û£º
//¶Ôsock_cliÉèÖÃKEEPALIVEºÍNODELAY
len = sizeof(unsigned int);
setsockopt(sock_cli, SOL_SOCKET, SO_KEEPALIVE, &optval, len);//ʹÓÃKEEPALIVE
setsockopt(sock_cli, IPPROTO_TCP, TCP_NODELAY, &optval, len);//½ûÓÃNAGLEËã·¨
ÇëÎÊÓÐʲô·½Ê½¿ÉÒÔ½â¾öÕâÖÖÇé¿ö£¿
Èç¹ûÊÇWindowsµÄ£¬¿ÉÒÔ°ÑÄں˵ķ¢ËÍbufferÉèΪ0£¬Ò²¾ÍÊÇsocketµÄSO_SNDBUFÑ¡Ïî¡£ÄÇôֱµ½·þÎñÆ÷TCPÊÕµ½Êý¾Ý²¢ackÁË£¬¿Í»§¶ËµÄдÈë²Å·µ»Ø³É¹¦¡£
²»¹ýÕâÖÖÉèSO_SNDBUFµÄ·½·¨ÔÚLinuxÉÏÊÇÐв»Í¨µÄ¡£Linux²»Èðѷ¢ËÍbufferÉèΪ0¡£
LinuxÄÚºËÖеĴúÂëÊÇÕâÑùµÄ£º
Socket.c
int sock_setsockopt(struct socket *sock, int level, int optname,
char __user *optval, int optlen)
{
case SO_SNDBUF:
/* Don't error on this BSD doesn't and if you think
about it this is right. Otherwise apps have to
play 'guess the biggest size' games. RCVBUF/SNDBUF
are treated in BSD as hints */
if (val > sysctl_wmem_max)
val = sysctl_wmem_max;
set_sndbuf:
sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
if ((val * 2) < SOCK_MIN_SNDBUF)
sk->sk_sndbuf = SOCK_MIN_SNDBUF;
else
sk->sk_sndbuf = val
Ïà¹ØÎĵµ£º
ÓÃpscp ÔÚWindowsÓëLinuxÖ®¼ä´«ÊäÎļþ
putty¹¤¾ßÔÚÎÒµÄÏÂÔØÖÐÓÐ
²½ÖèÈçÏ£º
1. Õû¸öÁ÷³ÌÊÇÕâÑù£¬ÔÚwindowsµÄÃüÁîÐÐÏ£¬ÓÃpscpÃüÁî°ÑÎļþ´ÓwindowsÖ¸¶¨Ä¿Â¼·¢Ë͵½linuxÖ¸¶¨Ä¿Â¼£»»òÕßÊÇÎļþ´ÓlinuxÖ¸¶¨Ä¿Â¼ÏÂÔØµ½windowsÖ¸¶¨Ä¿Â¼ÖС£
Á½ÖÖ´«ÊäÎļþµÄ·½Ê½¶¼ÊÇÔÚWindowsϵͳϲÙ×÷µÄ£¬linuxÏµÍ ......
ÏȽéÉÜÒ»ÏÂÇé¿ö£¬·þÎñÆ÷AºÍ·þÎñÆ÷B¶¼ÊÇCentOS 4.6µÄϵͳ£¬ÏÖÔÚÒª×öHA
Cluster£¬ÎªÁ˱ÜÃâÁÑÄԵķ¢Éú£¬ÒªÌá¸ßÐÄÌøÁ´Â·µÄ¿É¿¿ÐÔ£¬ÏÂͼÊÇÏÖʱµÄÁ¬½ÓÇé¿ö£¬·þÎñÆ÷AµÄeth2¡¢eth3·Ö±ðºÍ·þÎñÆ÷BµÄeth2¡¢eth3
ÏàÁ¬£¨Ã»ÓÐ˳Ðò¹ØÏµ£©£¬ËùÓÐÍø¿¨¶¼ÊÇǧÕ×Íø¿¨£¬ÍØÆËͼÈçÏÂËùʾ£º
ÔÚ½éÉÜÒ»ÆðÓ²¼þÇé¿ö£¬·þÎñÆ÷AÊÇһ̨HP DL380
G5£¬ ......
windows(dos)ÏµĻ»Ðзû ºÍ linux (ubuntu)ÏµĻ»ÐзûÊDz»Í¬µÄ¡£
ÔÚÉæ¼°µ½DOSϵÄÎı¾ ÔÚLINUXÏ ²Ù×÷ʱ£¬¾ÍÉæ¼°µ½»»Ðзû²»Í¬´øÀ´µÄÂé·³¡£
£¬ÔÚDOSʹÓõĻ»ÐзûΪ ^M$£¬ÎÒÃdzÆÎªCRÓëLFÁ½¸ö·ûºÅ¡£¶øÔÚLinuxÖУ¬Ôò½öÓÐLF ($) Õâ¸ö»»Ðзû¡£Õâ¸ö»»Ðзû¶ÔÓÚ
LinuxµÄÓ°ÏìºÜ´ó¡£
ÎÒÃÇ˵¹ý£¬ÔÚ¿ªÊ¼Ö´ÐÐLinuxÃüÁîʱ£¬ËüµÄÅжÏÒÀ
......
ÎÒ×î½üµÄ¹¤×÷ÊÇÔÚlinux»·¾³Ï²âÊÔÒ»¸ö.soµÄ¶¯Ì¬¿â£¬ÎÒÔÝʱÃüÃûΪlibdawn.so,ÊÇͬÊÂʵÏֵģ¬ÎÒÐèÒªÔÙÎҵIJâÊÔ³ÌÐòÖмÓÔØÕâ¸ö¿â£¬²¢µ÷ÊԸÿ⣬ÎÒÓõıàÒë»·¾³ÊÇEclipse.
1. ÔÚEclipse->Project->Properities->c/c++ Build->setting->gcc c++ Linker(Èç¹ûÊÇÓÃgcc c±àÒëµÄÔòÑ¡gcc c Linker)->Libraries ......
Ö÷Òª¿´ÁËLinuxÍêȫעÊÍÄDZ¾Ê飬ÖÕÓÚ×¼±¸¹¥¶ÁLinuxÄÚºËÔ´ÂëÁË£¬ÏÈ¿´Á˵ڶþÕŵÄ×ÜÌå¸ÅÄ¸Ð¾õ²Ù×÷ϵͳÓкܶණÎ÷»¹ÕæÊÇ´óͬСÒ죬¼ÇµÃucos¾ÍÊÇÓÐÒ»¸ö½Ð×ö¿ì±íµÄ¶«Î÷£¬ÀïÃæ×î¶à¿ÉÒÔ±íʾ64¸ö½ø³Ì£¬¶øÔç°æµÄLinux£¨0.11£©Ò²ÓÐÕâ¸öһ˵µÄ¶«Î÷¡£
ÔÚLinuxÖÐÒ²ÓÐÒ»¸öPCBÀ´±íʾÿ¸ö½ø³Ì£¬ÔÚÕâ¸ö½á¹¹ÌåÖУ¬ÓÐÖ¸ÏòÈÎÎñ´úÂëµÄÖ ......