亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1288 | 回復: 2
打印 上一主題 下一主題

[C] UDP 為什么在不同內核版本表現(xiàn)出來的現(xiàn)象不同呢 [復制鏈接]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-05-13 08:03 |只看該作者 |倒序瀏覽
linux 上的UDP程序

在不同版本的內核上執(zhí)行時,表現(xiàn)出來的現(xiàn)象不一樣,估計是啥原因造成的呢?

程序執(zhí)行后,應該表現(xiàn)如下;
PC端用網絡助手持續(xù)發(fā)命令 A;UDP服務端,解析命令,并返回結果;PC發(fā)送頻率是10ms,服務端處理一次指令要1s, 因此,在服務端會有很多條指令沒有執(zhí)行;此時,PC發(fā)命令B,應該立即將B命令對應結果返回給PC

在linux  內核版本,3.2.0上,沒有問題,持續(xù)發(fā)A ,發(fā)一段時間后,切換為命令B,可以立即返回B的結果。

在linux內核版本為 2.6.8 ,3.5.x的內核上,就不能立即返回B對應的結果?偸且獔(zhí)行幾條命令A的結果后,才能返回命令B的結果....,,感覺就是緩存幾條上一個命令

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報告]
發(fā)表于 2015-05-13 10:49 |只看該作者
現(xiàn)在試了三個版本的內核
2.6.8
3.2.0
3.5.x

程序分別在 2.6,3.2,3.5上編譯, 編譯過的文件,分別在 2.6;3.2;3.5上執(zhí)行,只有在3.2上的執(zhí)行結果是想要的結果
也就說,無論在哪個版本上編譯的程序,在內核3.2上執(zhí)行,結果是想要的
而無論在哪個版本上編譯的程序,在3.2以為的內核上跑,結果都超出意外了...

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
3 [報告]
發(fā)表于 2015-05-13 19:54 |只看該作者
經人提醒,查看內核,以SOCK_MIN_RCVBUF 為關鍵字,凡是有 SOCK_MIN_RCVBUF 關鍵字的文件都對比一遍

發(fā)現(xiàn)有差異:

3.2.0 與2.6.32的差異就在于,SOCK_MIN_RCVBUF 定義的大小
3.2.0與 3.5.0 的差異就在于,在ip_vs_sync.c文件中,3.2.0未做對SOCK_MIN_RCVBUF 的操作;3.5.0里對SOCK_MIN_RCVBUF 作了操作


  1. sock.h
  2. 3.2.0
  3. #define SOCK_MIN_RCVBUF (2048 + sizeof(struct sk_buff))
  4. 3.5.0
  5. #define SOCK_MIN_RCVBUF (2048 + sizeof(struct sk_buff))
  6. 2.6.32
  7. #define SOCK_MIN_RCVBUF 256

  8. Tcp.c

  9. 3.2.0
  10. case TCP_WINDOW_CLAMP:
  11.                 if (!val) {
  12.                         if (sk->sk_state != TCP_CLOSE) {
  13.                                 err = -EINVAL;
  14.                                 break;
  15.                         }
  16.                         tp->window_clamp = 0;
  17.                 } else
  18.                         tp->window_clamp = val < SOCK_MIN_RCVBUF / 2 ?
  19.                                                 SOCK_MIN_RCVBUF / 2 : val;
  20.                 break;

  21. 3.5.0
  22. case TCP_WINDOW_CLAMP:
  23.                 if (!val) {
  24.                         if (sk->sk_state != TCP_CLOSE) {
  25.                                 err = -EINVAL;
  26.                                 break;
  27.                         }
  28.                         tp->window_clamp = 0;
  29.                 } else
  30.                         tp->window_clamp = val < SOCK_MIN_RCVBUF / 2 ?
  31.                                                 SOCK_MIN_RCVBUF / 2 : val;
  32.                 break;


  33. 2.6.32
  34. case TCP_WINDOW_CLAMP:
  35.                 if (!val) {
  36.                         if (sk->sk_state != TCP_CLOSE) {
  37.                                 err = -EINVAL;
  38.                                 break;
  39.                         }
  40.                         tp->window_clamp = 0;
  41.                 } else
  42.                         tp->window_clamp = val < SOCK_MIN_RCVBUF / 2 ?
  43.                                                 SOCK_MIN_RCVBUF / 2 : val;
  44.                 break;






  45. Sock.c
  46. 3.2.0
  47. if ((val * 2) < SOCK_MIN_RCVBUF)
  48.                         sk->sk_rcvbuf = SOCK_MIN_RCVBUF;
  49.                 else
  50.                         sk->sk_rcvbuf = val * 2;
  51.                 break;
  52. 3.5.0
  53. sk->sk_rcvbuf = max_t(u32, val * 2, SOCK_MIN_RCVBUF);
  54.                 break;
  55. 2.6.32
  56. if ((val * 2) < SOCK_MIN_RCVBUF)
  57.                         sk->sk_rcvbuf = SOCK_MIN_RCVBUF;
  58.                 else
  59.                         sk->sk_rcvbuf = val * 2;
  60.                 break;



  61. ip_vs_sync.c
  62. 3.2.0
  63. //無 SOCK_MIN_RCVBUF內容
  64. 3.5.0
  65. static void set_sock_size(struct sock *sk, int mode, int val)
  66. {
  67.         /* setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)); */
  68.         /* setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &val, sizeof(val)); */
  69.         lock_sock(sk);
  70.         if (mode) {
  71.                 val = clamp_t(int, val, (SOCK_MIN_SNDBUF + 1) / 2,
  72.                               sysctl_wmem_max);
  73.                 sk->sk_sndbuf = val * 2;
  74.                 sk->sk_userlocks |= SOCK_SNDBUF_LOCK;
  75.         } else {
  76.                 val = clamp_t(int, val, (SOCK_MIN_RCVBUF + 1) / 2,
  77.                               sysctl_rmem_max);
  78.                 sk->sk_rcvbuf = val * 2;
  79.                 sk->sk_userlocks |= SOCK_RCVBUF_LOCK;
  80.         }
  81.         release_sock(sk);
  82. }

  83. 2.6.32
  84. //無SOCK_MIN_RCVBUF內容
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP