• 值结果参数(socket编程中的函数举例)


    值-结果参数(socket编程中一到七的struct sockaddr_in的长度参数)

    1.概念:当函数参数是从内核到进程时,函数被调用时参数大小是一个值,它告诉内核该参数的结构大小避免内核写操作越界,函数返回时,参数的结构大小又是一个结果,它告诉进程内核写进数据的多少,这种参数叫做值-结果参数。

    2.例子:八个socket编程中涉及的函数中,总是通过指针来传递指向结构的指针。同时结构的长度也作为参数来传递,但是其传递的方法取决于结构的传递方向:侍从内核到进程还是从进程到内核。详细如下:
    1>.参数从进程到内核:
    bind、connect从进程到内核传递参数,它明确知道要拷贝多少以及拷贝的数据。因此一般传递一个长度,例如:
    struct sockaddr_in addr;
    memset(&inAddr, 0, sizeof(inAddr));
    addr.sin_addr.s_addr=inet_addr(INADDR_ANY);
    addr.sin_family=AF_INET;
    addr.sin_port=htons(PORT);

    //..........

    connect( sockfd, (struct sockaddr*)&addr, sizeof(addr) );

    2>.参数从内核到进程:
    accept、getsockname、getpeername,函数被调用时结构大小是一个值,它告诉内核该结构的大小避免内核写操作越界,函数返回时,结构大小又是一个结果,它告诉进程内核写进数据的多少,这种参数叫做值-结果参数。例如:
    struct sockaddr_in addr;

    //..........

    socklen_t len = sizeof(addr);

    getpeername( sockfd, (struct sockaddr*)&addr, &len );

    [Remark]
    sendto是从进程到内核传递参数的。
    recvfrom是从内核到进程传递参数的。

  • 相关阅读:
    由群里在职的同学给出污染物推断题想到的
    参考文献期刊和会议的缩写
    并行程序开发笔记
    对有关推理方法的理解---支离破碎篇
    改基金的困惑与无奈
    对生物信息学基础的补习
    DPI深度报文检测架构及关键技术实现
    OSGi 和 C++
    CentOS安装glibc-2.14,错误安装libc.so.6丢失急救办法
    误删除libc.so.6的解决方法
  • 原文地址:https://www.cnblogs.com/hnrainll/p/2116630.html
Copyright © 2020-2023  润新知