ÎÞÂÛÊÇÉ罻ýÌå¡¢µç×ÓÉÌÎñ£¬»¹ÊÇÔÆ¼ÆËã·þÎñ£¬¶¼Àë²»¿ª¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äµÄ¸ßЧͨÐÅ
Linux£¬×÷Ϊ¿ªÔ´²Ù×÷ϵͳµÄٮٮÕߣ¬ÒÔÆäÎȶ¨ÐÔ¡¢°²È«ÐÔºÍÇ¿´óµÄ¿ª·¢ÉçÇø£¬³ÉΪÁ˹¹½¨¸ßÐÔÄÜÍøÂçÓ¦ÓõÄÀíÏëÆ½Ì¨
¶øCÓïÑÔ£¬×÷Ϊ×î½Ó½üÓ²¼þµÄ¸ß¼¶±à³ÌÓïÑÔÖ®Ò»£¬Æä¸ßЧÐÔºÍÁé»îÐÔʹÆä³ÉΪ¿ª·¢µ×²ãÍøÂç·þÎñµÄÊ×Ñ¡
±¾ÎĽ«ÉîÈë̽ÌÖÈçºÎÔÚLinux»·¾³Ï£¬Ê¹ÓÃCÓïÑÔ¿ª·¢Ò»¸ö¸ßЧ¡¢¿É¿¿µÄ¿Í»§¶Ë³ÌÐò£¬º¸Ç´Ó»ù´¡ÖªÊ¶µ½ÊµÕ½Ó¦ÓõÄÈ«·½Î»ÄÚÈÝ
Ò»¡¢LinuxÍøÂç±à³Ì»ù´¡ 1.1 Ì×½Ó×Ö£¨Sockets£©¼ò½é Ì×½Ó×ÖÊÇÍøÂçͨÐŵĻùʯ£¬ËüÌṩÁËÒ»¸ö¶Ëµã£¬Ê¹µÃÁ½Ì¨»úÆ÷ÉϵijÌÐò¿ÉÒÔͨ¹ýÍøÂç½øÐÐÊý¾Ý´«Êä
ÔÚLinuxÖУ¬Ì×½Ó×Ö·ÖΪÈýÖÖÀàÐÍ£ºÁ÷ʽÌ×½Ó×Ö£¨SOCK_STREAM£¬»ùÓÚTCP£©¡¢Êý¾Ý±¨Ì×½Ó×Ö£¨SOCK_DGRAM£¬»ùÓÚUDP£©ºÍÔʼÌ×½Ó×Ö£¨SOCK_RAW£¬Ö±½Ó²Ù×÷IP²ã£©
¶ÔÓÚ´ó¶àÊý¿Í»§¶Ë³ÌÐò¶øÑÔ£¬TCPÒòÆäÃæÏòÁ¬½Ó¡¢¿É¿¿´«ÊäµÄÌØÐÔ¶ø±»¹ã·ºÓ¦ÓÃ
1.2 ÍøÂçµØÖ·Óë¶Ë¿Ú ÿ¸öÍøÂçͨÐŵIJÎÓëÕß¶¼ÐèÒªÒ»¸öΨһµÄ±êʶ·û£¬¼´IPµØÖ·ºÍ¶Ë¿ÚºÅ
IPµØÖ·ÓÃÓÚ±êÊ¶ÍøÂçÖеÄÉ豸£¬¶ø¶Ë¿ÚºÅÔòÓÃÓÚÇø·ÖͬһÉ豸ÉÏÔËÐеIJ»Í¬·þÎñ
ÔÚCÓïÑÔÖУ¬¿ÉÒÔͨ¹ý`struct sockaddr_in`½á¹¹ÌåÀ´´æ´¢ÕâЩÐÅÏ¢
1.3 »ù±¾Á÷³Ì - ´´½¨Ì×½Ó×Ö£ºÊ¹ÓÃsocket()º¯Êý´´½¨Ò»¸öеÄÌ×½Ó×Ö
- °ó¶¨µØÖ·£¨½ö·þÎñÆ÷ÐèÒª£©£º·þÎñÆ÷ʹÓÃbind()º¯Êý½«Ì×½Ó×ÖÓëÌØ¶¨µÄIPµØÖ·ºÍ¶Ë¿ÚºÅ¹ØÁªÆðÀ´
- ¼àÌýÁ¬½Ó£¨½ö·þÎñÆ÷ÐèÒª£©£º·þÎñÆ÷µ÷ÓÃlisten()º¯Êý¿ªÊ¼¼àÌýÀ´×Ô¿Í»§¶ËµÄÁ¬½ÓÇëÇó
- ½¨Á¢Á¬½Ó£º¿Í»§¶ËʹÓÃconnect()º¯Êý³¢ÊÔÁ¬½Óµ½·þÎñÆ÷µÄÖ¸¶¨IPµØÖ·ºÍ¶Ë¿ÚºÅ
- Êý¾Ý´«Ê䣺һµ©Á¬½Ó½¨Á¢£¬Ë«·½¿ÉÒÔʹÓÃsend()ºÍ`recv()`º¯Êý½øÐÐÊý¾ÝµÄ·¢ËͺͽÓÊÕ
- ¹Ø±ÕÁ¬½Ó£ºÊ¹ÓÃclose()º¯Êý½áÊøÍ¨ÐŲ¢ÊÍ·Å×ÊÔ´
¶þ¡¢ÊµÕ½£º¿ª·¢Ò»¸ö¼òµ¥µÄTCP¿Í»§¶Ë 2.1 »·¾³×¼±¸ ÔÚ¿ªÊ¼±àÂë֮ǰ£¬È·±£ÄãµÄLinuxϵͳÒѾ°²×°Á˱ØÒªµÄ¿ª·¢¹¤¾ß£¬Èçgcc±àÒëÆ÷ºÍmake¹¹½¨¹¤¾ß
´ËÍ⣬Á˽â»ù±¾µÄLinuxÃüÁîÐвÙ×÷Ò²ÊDZز»¿ÉÉÙµÄ
2.2 ´úÂëʵÏÖ ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄTCP¿Í»§¶Ë³ÌÐòʾÀý£¬ËüÁ¬½Óµ½Ö¸¶¨µÄ·þÎñÆ÷£¬·¢ËÍÒ»ÌõÏûÏ¢£¬²¢½ÓÊÕ·þÎñÆ÷µÄÏìÓ¦
include
Èý¡¢ÓÅ»¯ÓëÀ©Õ¹
3.1 ´íÎó´¦Àí
ÔÚʵ¼ÊÓ¦ÓÃÖУ¬³ýÁË»ù±¾µÄ´íÎó´òÓ¡Í⣬»¹ÐèÒª¿¼ÂǸüϸÖµĴíÎó´¦Àí²ßÂÔ£¬ÈçÖØÊÔ»úÖÆ¡¢³¬Ê±´¦ÀíµÈ£¬ÒÔÌá¸ß³ÌÐòµÄ½¡×³ÐÔ
3.2 ²¢·¢´¦Àí
¶ÔÓÚÐèÒª´¦Àí¶à¸ö²¢·¢Á¬½ÓµÄ¿Í»§¶Ë³ÌÐò£¬¿ÉÒÔ¿¼ÂÇʹÓöàÏ̻߳òÒì²½I/O¼¼Êõ£¬Èç`epoll`£¨LinuxÌØÓеĸßЧI/Oʼþ֪ͨ»úÖÆ£©£¬ÒÔÌá¸ß³ÌÐòµÄ²¢·¢ÐÔÄÜ
3.3 °²È«ÐÔ
ÍøÂç±à³ÌÖУ¬°²È«ÐÔÖÁ¹ØÖØÒª ʹÓÃTLS/SSL¼ÓÃÜͨÐÅ£¬ÑéÖ¤·þÎñÆ÷Ö¤Ê飬ÒÔ¼°ÊµÊ©Êʵ±µÄÊäÈëÑéÖ¤ºÍ´íÎó´¦Àí£¬¶¼ÊÇÈ·±£¿Í»§¶Ë³ÌÐò°²È«ÐԵĹؼü´ëÊ©
3.4 ÐÔÄÜÓÅ»¯
¸ù¾Ýʵ¼ÊÐèÇ󣬿ÉÒÔͨ¹ýµ÷Õû»º³åÇø´óС¡¢Ê¹Ó÷Ç×èÈûI/O¡¢ÓÅ»¯Êý¾Ý´«ÊäÂß¼µÈ·½Ê½£¬½øÒ»²½ÌáÉý¿Í»§¶Ë³ÌÐòµÄÐÔÄÜ
ËÄ¡¢½áÓï
ͨ¹ýÒÔÉÏÄÚÈÝ£¬ÎÒÃÇÉîÈëÁ˽âÁËÔÚLinux»·¾³ÏÂʹÓÃCÓïÑÔ¿ª·¢¿Í»§¶Ë³ÌÐòµÄ»ù±¾Á÷³ÌºÍ¹Ø¼ü¼¼Êõ ´ÓÌ×½Ó×ֵĻù±¾²Ù×÷µ½Êµ¼Ê´úÂëµÄʵÏÖ£¬ÔÙµ½ÐÔÄÜÓÅ»¯ºÍ°²È«ÐԵĿ¼ÂÇ£¬Ã¿Ò»²½¶¼ÖÁ¹ØÖØÒª Ëæ×ż¼ÊõµÄ²»¶Ï½ø²½£¬ÍøÂç±à³ÌÁìÓòÒ²ÔÚ²»¶Ï·¢Õ¹£¬ÕÆÎÕÕâЩ»ù´¡ÖªÊ¶£¬½«ÎªÄã̽Ë÷¸ü¸´ÔÓµÄÍøÂçÓ¦ÓôòϼáʵµÄ»ù´¡ ÎÞÂÛÊÇÔÚѧÊõÑо¿¡¢ÆóÒµ¼¶Ó¦Óÿª·¢£¬»¹ÊǸöÈËÏîĿʵ¼ùÖУ¬Linux C¿Í»§¶Ë³ÌÐòµÄ¿ª·¢¶¼½«ÊÇÄã²»¿É»òȱµÄ¼¼ÄÜÖ®Ò»