home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume20 / etherlib / part01 / src / nit3writev.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-24  |  844 b   |  42 lines

  1. /* $Id: nit3writev.c,v 2.0 89/10/20 19:02:42 dupuy Exp $ */
  2.  
  3. #include <sys/param.h>
  4. #include <sys/socket.h>
  5.  
  6. #include "libether.h"
  7.  
  8. extern unsigned _ether_types[NOFILE];
  9.  
  10. #define ether_type (_ether_types[fd])
  11.  
  12. /*
  13.  * Writes a single packet, filling src and type fields.
  14.  */
  15.  
  16. int
  17. ether_writev (fd, packet)
  18. int fd;
  19. ether_vec *packet;
  20. {
  21.     struct sockaddr sa;
  22.     struct msghdr msg;
  23.  
  24.     sa.sa_family = AF_UNSPEC;
  25.     bcopy ((char *) packet, sa.sa_data, ETHER_TYPE);
  26.  
  27.     if (ether_type != ETHER_ALLTYPES)
  28.     {
  29.     sa.sa_data[12] = (ether_type >> 8) & 0xff;
  30.     sa.sa_data[13] = ether_type & 0xff;
  31.     }
  32.  
  33.     msg.msg_iov = packet->iov;
  34.     msg.msg_iovlen = packet->iovcnt;
  35.     msg.msg_name = (caddr_t) & sa;
  36.     msg.msg_namelen = sizeof (sa);
  37.     msg.msg_accrights = 0;
  38.     msg.msg_accrightslen = 0;
  39.  
  40.     return (sendmsg (fd, &msg, 0) < 0 ? -1 : 0);
  41. }
  42.