copyb man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

COPYB(9F)							     COPYB(9F)

NAME
       copyb - copy a message block

SYNOPSIS
       #include <sys/stream.h>

       mblk_t *copyb(mblk_t *bp);

INTERFACE LEVEL
       Architecture independent level 1 (DDI/DKI).

PARAMETERS
       bp
	     Pointer to the message block from which data is copied.

DESCRIPTION
       The  copyb() function allocates a new message block, and copies into it
       the data from the block that bp denotes. The new block will be at least
       as  large as the block being copied. copyb() uses the b_rptr and b_wptr
       members of bp to determine how many bytes to copy.

RETURN VALUES
       If successful, copyb() returns a pointer to the newly allocated message
       block containing the copied data. Otherwise, it returns a NULL pointer.

CONTEXT
       The copyb() function can be called from user, interrupt, or kernel con‐
       text.

EXAMPLES
       Example 1 Using copyb

       For each message in the list, test to see if the	 downstream  queue  is
       full with the canputnext(9F) function (line 21). If it is not full, use
       copyb to copy a header message block, and dupmsg(9F) to	duplicate  the
       data to be retransmitted. If either operation fails, reschedule a time‐
       out at the next valid interval.

       Update the new header block with the correct destination address	 (line
       34),  link  the	message	 to it (line 35), and send it downstream (line
       36). At the end of the list, reschedule this routine.

	  1  struct retrans {
	  2	   mblk_t	      *r_mp;
	  3	   int		      r_address;
	  4	   queue_t	      *r_outq;
	  5	   struct retrans     *r_next;
	  6  };
	  7
	  8  struct protoheader {
		...
	  9	int		       h_address;
		...
	 10  };
	 11
	 12  mblk_t *header;
	 13
	 14  void
	 15  retransmit(struct retrans *ret)
	 16  {
	 17	  mblk_t *bp, *mp;
	 18	  struct protoheader *php;
	 19
	 20	  while (ret) {
	 21	    if (!canputnext(ret->r_outq)) {   /* no room */
	 22		   ret = ret->r_next;
	 23		   continue;
	 24	    }
	 25	    bp = copyb(header);		      /* copy header msg. block */
	 26	    if (bp == NULL)
	 27		  break;
	 28	    mp = dupmsg(ret->r_mp);	      /* duplicate data */
	 29	    if (mp == NULL) {		      /* if unsuccessful */
	 30		 freeb(bp);		      /* free the block */
	 31		 break;
	 32	    }
	 33	    php = (struct protoheader *)bp->b_rptr;
	 34	    php->h_address = ret->r_address;   /* new header */
	 35	    bp->bp_cont = mp;		       /* link the message */
	 36	    putnext(ret->r_outq, bp);	       /* send downstream */
	 37	    ret = ret->r_next;
	 38	  }
	 39	  /* reschedule */
	 40	  (void) timeout(retransmit, (caddr_t)ret, RETRANS_TIME);
	 41  }

SEE ALSO
       allocb(9F), canputnext(9F), dupmsg(9F)

       Writing Device Drivers

       STREAMS Programming Guide

				 Jan 16, 2006			     COPYB(9F)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net