हाय मेरे पास यूडीपी सॉकेट के लिए प्रेषण बफर आकार की जांच करने के लिए निम्न प्रोग्राम है। हालांकि, मैं वापसी मूल्य मेरे लिए थोड़ा उलझन में है। मैं निम्नलिखित सरल अनुप्रयोग का उपयोग करें:सेट/होटॉकॉपट को समझना SO_SNDBUF
#include <sys/socket.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int sockfd, sendbuff;
socklen_t optlen;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1)
printf("Error");
int res = 0;
// Get buffer size
optlen = sizeof(sendbuff);
res = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);
if(res == -1)
printf("Error getsockopt one");
else
printf("send buffer size = %d\n", sendbuff);
// Set buffer size
sendbuff = 98304;
printf("sets the send buffer to %d\n", sendbuff);
res = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));
if(res == -1)
printf("Error setsockopt");
// Get buffer size
optlen = sizeof(sendbuff);
res = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);
if(res == -1)
printf("Error getsockopt two");
else
printf("send buffer size = %d\n", sendbuff);
return 0;
}
मेरी मशीन पर उत्पादन होता है:
भेजने बफर आकार = 129024
भेजने बफर आकार = 196,608
के लिए भेजें बफर सेटक्या कोई यह स्पष्ट कर सकता है कि मैं यहां क्या गलत कर रहा हूं या आउटपुट की व्याख्या कैसे कर सकता हूं?
पवित्र नेटवर्किंग बैटमैन! यही वह जगह है जहां सभी skbuf सामान जाता है :) –
मुझे आश्चर्य है कि कर्नेल मूल्य क्यों दोगुना करता है? – csyangchen
@csyangchen: मैं केवल अनुमान लगा सकता हूं, लेकिन मुझे लगता है कि किसी को यह विचार था कि बफर को आकार n पर सेट करके, बफर को PAYLOAD के एन बाइट्स को पकड़ने में सक्षम होना चाहिए। इसलिए संदेश शीर्षलेख रखने के लिए अतिरिक्त बफर आकार आवश्यक है (कम से कम कनेक्शन रहित अंतर्निहित प्रोटोकॉल के मामले में, जैसे कि यूडीपी)। – Aconcagua