亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uiciudp.c

?? 450b+linux+wm射頻模塊的一個門禁系統的完整源代碼
?? C
字號:
/* uiciudp.c udp sockets implementation */

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/time.h>
#include "restart.h"
#include "uiciname.h"
#include "uiciudp.h"

/*
 *                           u_openudp
 * Return a file descriptor.
 *  It is bound to the given port if the port is positive.
 *
 * parameter:
 *        port = number of port to bind to
 * returns:  file descriptor if successful
 *           -1 on error and sets errno
 */
int u_openudp(u_port_t port) {
   int error;
   int one = 1;
   struct sockaddr_in server;
   int sock;

   if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
      return -1;

   if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) == -1) {
      error = errno;
      r_close(sock);
      errno = error;
      return -1;
   }
       
   if (port > 0) {
      server.sin_family = AF_INET;
      server.sin_addr.s_addr = htonl(INADDR_ANY);
      server.sin_port = htons((short)port);
 
      if (bind(sock, (struct sockaddr *)&server, sizeof(server)) == -1) {
         error = errno;
         r_close(sock);
         errno = error;
         return -1;
      }
   }
   return sock;
}

/*
 *                           u_recvfrom
 *
 * Retrieve information from a file descriptor.
 *
 * parameters:
 *       fd = socket file descriptor
 *       buf = buffer that receives the data
 *       nbytes = number of bytes to retrieve
 *       ubufp = a pointer to a buffer of type u_buf_t
 * returns:
 *      the number of bytes read if successful.
 *         ubufp is filled with information about the sending host and port
 *      -1 on error and sets errno
 */

ssize_t u_recvfrom(int fd, void *buf, size_t nbytes, u_buf_t *ubufp) {
   int len;
   struct sockaddr *remote;
   int retval;

   len = sizeof (struct sockaddr_in);
   remote = (struct sockaddr *)ubufp;
   while (((retval = recvfrom(fd, buf, nbytes, 0, remote, &len)) == -1) &&
           (errno == EINTR)) ;  
   return retval;
}

/*
 *                           u_recvfromtimed
 *
 * Retrieve information from a file descriptor with a timeout.
 *
 * parameters:
 *       fd = socket file descriptor
 *       buf = buffer to receive the data
 *       nbytes = number of bytes to retrieve
 *       ubufp = a pointer to a buffer of type u_buf_t
 *       seconds = timeout in seconds
 * returns:
 *      number of bytes received if successful
 *      -1 on error and sets errno
 */

ssize_t u_recvfromtimed(int fd, void *buf, size_t nbytes, u_buf_t *ubufp,
                         double seconds) {
   int len;
   struct sockaddr *remote;
   int retval;
   struct timeval timedone;

   timedone = add2currenttime(seconds);
   if (waitfdtimed(fd, timedone) == -1)
      return (ssize_t)(-1);
   len = sizeof (struct sockaddr_in);
   remote = (struct sockaddr *)ubufp;
   while (((retval = recvfrom(fd, buf, nbytes, 0, remote, &len)) == -1) &&
           (errno == EINTR)) ;  
   return retval;
}

/*
 *                           u_gethostname
 *
 * Get the host name from a buffer of type u_buf_t
 *
 * parameters:
 *       ubufp = a pointer to a buffer of type u_buf_t that was
 *          filled by u_recvfrom
 *       hostn = a buffer of size hostnsize
 *       hostsize = the size of the hostn buffer
 * returns:
 *      hostn is filled with the name of the host, possibly truncated.
 */

void u_gethostname(u_buf_t *ubufp, char *hostn, int hostnsize) {
   struct sockaddr_in *remotep;

   remotep = (struct sockaddr_in *)ubufp;
   addr2name(remotep->sin_addr, hostn, hostnsize);
}

/*
 *                           u_gethostinfo
 *
 * Get a printable string containing the host name and port
 *
 * parameters:
 *       ubufp = a pointer to a buffer of type u_buf_t that was
 *          filled by u_recvfrom
 *       info = a buffer to hold the returned string
 *       infosize = the size of the info buffer
 * returns:
 *      a string is put in info, possibly truncated
 */
void u_gethostinfo(u_buf_t *ubufp, char *info, int infosize) {
   int len;
   int portnumber;

   portnumber = ntohs(ubufp->sin_port);
   len = snprintf(info, infosize, "port number is %d on host ", portnumber);
   info[infosize-1] = 0;                              /* in case name not fit */
   if (len >= infosize) return;
   u_gethostname(ubufp, info+len, infosize-len);
}

 
/*
 *                           u_comparehost
 *
 * Compare the given host and port with the info in a u_buf_t structure
 *
 * parameters:
 *       ubufp = a pointer to a buffer of type u_buf_t that was
 *          filled by u_recvfrom
 *       hostn = a string representing the host name
 *       port  = a port number
 * returns:
 *      1 if match
 *      0 if no match
 */
 
int u_comparehost(u_buf_t *ubufp, char *hostn, u_port_t port) {
   in_addr_t addr;
   struct sockaddr_in *remotep;

   remotep = (struct sockaddr_in *)ubufp;
   if ((port != ntohs(remotep->sin_port)) ||
       (name2addr(hostn, &addr) == -1) ||
       (memcmp(&(remotep->sin_addr.s_addr), &addr, sizeof(in_addr_t)) != 0))
      return 0;
   return 1;
}

 
/*
 *                           u_sendto
 *
 * Send information atomically to a remote host, using the buffer filled in
 * by recvfrom
 *
 * This is almost the same as sendto except that
 *   it retries if interrupted by a signal and
 *   the length of the buffer indicating the destination is not passed
 *
 * parameters:
 *       fd = file descriptor
 *       buf = buffer to be output
 *       nbytes = number of bytes to send
 *       ubufp = a pointer to a buffer of type u_buf_t that was
 *          filled by u_recvfrom
 * returns:
 *      the number of bytes that were sent (may not have been received)
 *      -1 on error and sets errno
 */

ssize_t u_sendto(int fd, void *buf, size_t nbytes, u_buf_t *ubufp) {
   int len;
   struct sockaddr *remotep;
   int retval;

   len = sizeof(struct sockaddr_in);
   remotep = (struct sockaddr *)ubufp;
   while (((retval = sendto(fd, buf, nbytes, 0, remotep, len)) == -1) &&
           (errno == EINTR)) ;  
   return retval;
}
 
/*
 *                           u_sendtohost
 *
 * Send information atomically to a remote host given the host name and port
 * 
 * parameters:
 *       fd = file descriptor
 *       buf = buffer to be output
 *       nbyte = number of bytes to send
 *       port = the port number to send to
 *       hostn = a string containing the name of the destination host
 * returns:
 *      the number of bytes that were sent (may not have been received)
 *      -1 on error and sets errno
 */
   
ssize_t u_sendtohost(int fd, void *buf, size_t nbytes, char *hostn,
                     u_port_t port) {
   struct sockaddr_in remote;

   if (name2addr(hostn, &(remote.sin_addr.s_addr)) == -1) {
      errno = EINVAL;
      return -1;
   }
   remote.sin_port = htons((short)port);
   remote.sin_family = AF_INET;
   return u_sendto(fd, buf, nbytes, &remote);
}

/*
 *                           u_join
 *
 * Join a multicast group
 *
 * parameters:
 *       IP_address = string representing the IP address of the group
 *       port = port number of multicast group
 *       ubufp = buffer to be filled in u_join
 * returns:
 *      a file descriptor on success
 *      -1 on error and sets errno
*/
int u_join(char *IP_address, u_port_t port, u_buf_t *ubufp) {
   int mcastfd;
   struct ip_mreq tempaddress;

   if ((mcastfd = u_openudp(port)) == -1)
      return mcastfd;
   
   tempaddress.imr_multiaddr.s_addr = inet_addr(IP_address);
   tempaddress.imr_interface.s_addr = htonl(INADDR_ANY);

        /* Join the multicast group. Let kernel choose the interface */
   if (setsockopt(mcastfd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                   &tempaddress, sizeof(tempaddress)) == -1)
      return -1;
   ubufp->sin_family = AF_INET;
   ubufp->sin_addr.s_addr = inet_addr(IP_address);
   ubufp->sin_port = htons((short)port);
   return mcastfd;
}

/* This version leaves the group but keeps the file descriptor open and
   still bound to the same port.  It can still receive messages on the port,
   but only those addressed directly to the given host.
*/
/*
 *                           u_leave
 *
 * Leave a multicast group.  Messages can still be received on the port
 * if they are directly addressed to the host.
 *
 * parameters:
 *       mcastfd = previously opened file descriptor returned by u_join
 *       ubufp = buffer filled in by previous u_join
 * returns:
 *      0 on success
 *      -1 on error with errno set
*/
int u_leave(int mcastfd, u_buf_t *ubufp) {  
   struct ip_mreq tempaddress;
 
   memcpy(&(tempaddress.imr_multiaddr),
         &(ubufp->sin_addr), sizeof(struct in_addr));   
   tempaddress.imr_interface.s_addr = htonl(INADDR_ANY);
   return setsockopt(mcastfd, IPPROTO_IP, IP_DROP_MEMBERSHIP,
                   &tempaddress, sizeof(tempaddress));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美撒尿777hd撒尿| 欧美美女喷水视频| 欧美在线高清视频| 久久久久久久久久久久久女国产乱| 国产精品高潮呻吟| 麻豆精品在线观看| 欧美日韩综合不卡| **性色生活片久久毛片| 国内精品久久久久影院一蜜桃| 97精品国产97久久久久久久久久久久| 欧美精品v日韩精品v韩国精品v| 中文字幕乱码久久午夜不卡 | 成人听书哪个软件好| 欧美精品日韩精品| 一区二区欧美精品| 成人av综合在线| 久久久.com| 精品午夜一区二区三区在线观看| 欧美三区免费完整视频在线观看| 国产精品不卡一区| 丁香亚洲综合激情啪啪综合| 国产日韩欧美精品电影三级在线| 亚洲午夜私人影院| 91网站最新地址| 久久久久久久免费视频了| 美女免费视频一区| 91精品国产乱| 欧美中文字幕一区| 精品中文字幕一区二区| 色av综合在线| 亚洲图片欧美激情| 成人av资源在线观看| 国产日产精品1区| 国产精品一区二区三区四区| 精品久久久久久无| 久99久精品视频免费观看| 91精品国产综合久久福利| 午夜国产不卡在线观看视频| 欧美亚洲国产一区在线观看网站| 亚洲黄色在线视频| 在线观看91精品国产入口| 一区二区三区在线影院| 9久草视频在线视频精品| 中文字幕在线观看不卡视频| 国产高清精品网站| 中文字幕一区二区三区四区 | 日韩一区二区免费高清| 国产亚洲精久久久久久| 国产人久久人人人人爽| 国产一区二区免费在线| 精品国产乱码久久久久久闺蜜 | 欧美在线综合视频| 亚洲亚洲人成综合网络| 欧美色爱综合网| 老司机免费视频一区二区| 精品奇米国产一区二区三区| 国产一区二区免费看| 亚洲欧洲性图库| 欧美色大人视频| 紧缚捆绑精品一区二区| 国产精品无码永久免费888| 色综合天天综合网国产成人综合天| 亚洲人成精品久久久久| 欧美色区777第一页| 国内久久精品视频| 亚洲欧美日韩一区二区三区在线观看| 色综合久久99| 蜜桃精品视频在线| 国产精品伦一区| 91精品国产美女浴室洗澡无遮挡| 国产尤物一区二区| 亚洲永久精品大片| 精品久久五月天| 91视频在线观看免费| 日韩av一区二区在线影视| 国产亚洲短视频| 欧美日韩大陆在线| 国产91丝袜在线播放| 天使萌一区二区三区免费观看| 久久精品免视看| 欧美浪妇xxxx高跟鞋交| 成人福利电影精品一区二区在线观看| 亚洲一二三专区| 欧美激情一区二区三区四区| 欧美性生活大片视频| 国产91富婆露脸刺激对白| 婷婷六月综合网| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 激情综合网最新| 一区二区三区国产精华| 国产三级精品视频| 欧美高清激情brazzers| 97se亚洲国产综合自在线不卡| 毛片不卡一区二区| 午夜精品久久久久久久99水蜜桃| 国产精品久久福利| 久久婷婷国产综合国色天香| 欧美伦理电影网| 色哟哟亚洲精品| 岛国精品在线观看| 国产精品一区2区| 久久精品国产秦先生| 亚洲v日本v欧美v久久精品| 18涩涩午夜精品.www| 久久久久亚洲综合| 精品乱人伦小说| 欧美一区二区视频在线观看2020| 在线观看91精品国产入口| 99久久精品一区| 99久久99精品久久久久久| 成人一区二区三区中文字幕| 国产麻豆成人精品| 国产一区二区三区国产| 精品中文字幕一区二区| 久久狠狠亚洲综合| 男人的j进女人的j一区| 日韩国产成人精品| 日韩国产精品久久久久久亚洲| 午夜精品一区二区三区免费视频| 亚洲综合免费观看高清在线观看| 亚洲欧美另类久久久精品| 中文字幕在线观看一区| 亚洲欧美区自拍先锋| 一区二区三区中文在线观看| 亚洲国产一区视频| 三级影片在线观看欧美日韩一区二区| 亚洲国产精品天堂| 日产精品久久久久久久性色| 日本中文一区二区三区| 免费观看日韩电影| 国产精品亚洲一区二区三区在线 | 亚洲在线一区二区三区| 一区二区三区蜜桃网| 亚洲一区二区三区自拍| 丝袜亚洲另类丝袜在线| 国模少妇一区二区三区| 成人午夜在线免费| 一本大道久久a久久综合| 欧美理论片在线| 欧美电影免费提供在线观看| 久久久精品黄色| 亚洲色图在线视频| 日本怡春院一区二区| 国产一区二区在线影院| 91在线观看美女| 欧美精选午夜久久久乱码6080| 日韩欧美国产综合一区| 久久精品人人做| 亚洲最大成人网4388xx| 免费在线看一区| 成人午夜免费视频| 欧美日韩一区视频| 久久久久久久一区| 亚洲影视资源网| 国产在线国偷精品免费看| 99精品视频在线观看免费| 制服丝袜国产精品| 国产精品毛片久久久久久| 亚洲福利视频一区二区| 国产老妇另类xxxxx| 欧美日韩在线一区二区| 国产欧美一区二区三区鸳鸯浴| 亚洲一区二区在线免费观看视频| 国产一区二区三区免费在线观看| 午夜伊人狠狠久久| 亚洲资源中文字幕| 国产又粗又猛又爽又黄91精品| 成人高清视频在线| 欧美一区二区二区| 国产精品每日更新在线播放网址| 亚洲h在线观看| 在线观看国产日韩| 中文欧美字幕免费| 秋霞影院一区二区| 欧美写真视频网站| 国产精品美女久久福利网站| 麻豆国产精品视频| 欧美日韩免费观看一区三区| 国产喷白浆一区二区三区| 天天av天天翘天天综合网| 成人激情开心网| 久久女同性恋中文字幕| 首页亚洲欧美制服丝腿| 91国产丝袜在线播放| 中文文精品字幕一区二区| 久久99精品国产麻豆婷婷洗澡| 欧美视频在线观看一区| 亚洲欧美综合另类在线卡通| 亚洲线精品一区二区三区| 久草精品在线观看| 9191成人精品久久| 亚洲一二三级电影| 欧洲精品中文字幕| 亚洲欧美日韩综合aⅴ视频| 丰满放荡岳乱妇91ww| 欧美成va人片在线观看| 日韩国产在线一| 91精品国产欧美一区二区| 丝袜美腿亚洲综合| 欧美精品亚洲一区二区在线播放|