MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Networking Services Library Functions                 tsnd(3NSL)



NAME
     tsnd - send data or expedited data over a connection

SYNOPSIS
     #include 



     int tsnd(int fd, void *buf, unsigned int nbytes, int flags);


DESCRIPTION
     This routine is part of the  XTI  interfaces  which  evolved
     from the TLI interfaces. XTI represents the future evolution
     of these interfaces. However, TLI interfaces  are  supported
     for  compatibility.  When  using  a TLI routine that has the
     same name as an XTI routine, the  tiuser.h header file  must
     be  used.   Refer  to  the   TLI COMPATIBILITY section for a
     description of differences between the two interfaces.


     This function is used to send  either  normal  or  expedited
     data.  The  argument  fd identifies the local transport end-
     point over which data should be sent, buf points to the user
     data,  nbytes  specifies the number of bytes of user data to
     be sent, and flags specifies any  optional  flags  described
     below:

     TEXPEDITED     If set in flags, the data will  be  sent  as
                     expedited  data  and  will be subject to the
                     interpretations of the transport provider.


     TMORE          If set in flags, this indicates to the tran-
                     sport  provider  that  the transport service
                     data unit  (TSDU)  (or  expedited  transport
                     service  data  unit  -  ETSDU) is being sent
                     through  multiple   tsnd()   calls.    Each
                     tsnd()  with the  TMORE flag set indicates
                     that another tsnd() will follow  with  more
                     data for the current TSDU (or ETSDU).

                     The end of the TSDU (or ETSDU) is identified
                     by  a tsnd() call with the  TMORE flag not
                     set. Use of  TMORE enables a user to  break
                     up  large  logical data units without losing
                     the boundaries of those units at  the  other
                     end  of  the  connection.  The  flag implies
                     nothing about how the data is  packaged  for
                     transfer  below  the transport interface. If
                     the transport provider does not support  the
                     concept  of  a TSDU as indicated in the info



SunOS 5.11           Last change: 7 May 1998                    1






Networking Services Library Functions                 tsnd(3NSL)



                     argument  on  return  from  topen(3NSL)  or
                     tgetinfo(3NSL),  the   TMORE  flag  is not
                     meaningful and will be ignored if set.

                     The sending of a zero-length fragment  of  a
                     TSDU  or  ETSDU is only permitted where this
                     is used to indicate the end  of  a  TSDU  or
                     ETSDU;  that is, when the TMORE flag is not
                     set. Some transport  providers  also  forbid
                     zero-length TSDUs and ETSDUs.


     TPUSH          If set in flags, requests that the  provider
                     transmit  all  data  that it has accumulated
                     but not sent.  The request is a local action
                     on  the  provider  and  does  not affect any
                     similarly named protocol flag (for  example,
                     the  TCP  PUSH flag). This effect of setting
                     this flag is protocol-dependent, and it  may
                     be  ignored  entirely by transport providers
                     which  do  not  support  the  use  of   this
                     feature.



     Note that the communications provider  is  free  to  collect
     data  in  a  send  buffer  until it accumulates a sufficient
     amount for transmission.


     By default, tsnd() operates in  synchronous  mode  and  may
     wait  if  flow  control  restrictions  prevent the data from
     being accepted by the local transport provider at  the  time
     the  call  is made.  However, if  ONONBLOCK is set by means
     of  topen(3NSL) or fcntl(2), tsnd() will execute in  asyn-
     chronous  mode,  and will fail immediately if there are flow
     control restrictions. The process can arrange to be informed
     when  the  flow control restrictions are cleared by means of
     either tlook(3NSL) or the EM interface.


     On successful completion,  tsnd()  returns  the  number  of
     bytes  (octets)  accepted  by  the  communications provider.
     Normally this will equal the number of octets  specified  in
     nbytes.   However,  if  ONONBLOCK is set or the function is
     interrupted by a signal, it is possible that  only  part  of
     the  data  has  actually been accepted by the communications
     provider.  In this case,  tsnd() returns a  value  that  is
     less than the value of nbytes.  If tsnd() is interrupted by
     a signal before it could transfer data to the communications
     provider,  it  returns   -1 with  terrno set to TSYSER and
     errno set to EINTR.



SunOS 5.11           Last change: 7 May 1998                    2






Networking Services Library Functions                 tsnd(3NSL)



     If nbytes is zero and sending of zero bytes is not supported
     by  the  underlying communications service,  tsnd() returns
     -1 with  terrno set to TBADATA.


     The size of each TSDU or ETSDU must not exceed the limits of
     the transport provider as specified by the current values in
     the TSDU or ETSDU fields in the info  argument  returned  by
     tgetinfo(3NSL).


     The error TLOK is returned for asynchronous events.  It  is
     required  only  for  an incoming disconnect event but may be
     returned for other events.

RETURN VALUES
     On successful completion,  tsnd()  returns  the  number  of
     bytes  accepted by the transport provider. Otherwise,  -1 is
     returned on failure and  terrno  is  set  to  indicate  the
     error.


     Note that if the number of bytes accepted by the  communica-
     tions  provider  is less than the number of bytes requested,
     this may either indicate that  ONONBLOCK  is  set  and  the
     communications  provider  is blocked due to flow control, or
     that  ONONBLOCK is clear and the function  was  interrupted
     by a signal.

ERORS
     On failure, terrno is set to one of the following:

     TBADATA       Illegal amount of data:

                        o    A single send was attempted specify-
                             ing  a TSDU (ETSDU) or fragment TSDU
                             (ETSDU) greater than that  specified
                             by the current values of the TSDU or
                             ETSDU fields in the info argument.

                        o    A send of a zero byte  TSDU  (ETSDU)
                             or  zero  byte  fragment  of  a TSDU
                             (ETSDU) is not supported by the pro-
                             vider.

                        o    Multiple   sends   were    attempted
                             resulting  in  a TSDU (ETSDU) larger
                             than that specified by  the  current
                             value of the TSDU or ETSDU fields in
                             the info argument - the  ability  of
                             an XTI implementation to detect such
                             an  error  case  is  implementation-



SunOS 5.11           Last change: 7 May 1998                    3






Networking Services Library Functions                 tsnd(3NSL)



                             dependent. See WARNINGS, below.


     TBADF          The specified file descriptor does not  refer
                    to a transport endpoint.


     TBADFLAG       An invalid flag was specified.


     TFLOW          ONONBLOCK was  set,  but  the  flow  control
                    mechanism  prevented  the  transport provider
                    from accepting any data at this time.


     TLOK          An asynchronous event has  occurred  on  this
                    transport endpoint.


     TNOTSUPORT    This function is not supported by the  under-
                    lying transport provider.


     TOUTSTATE      The communications endpoint referenced by  fd
                    is  not  in one of the states in which a call
                    to this function is valid.


     TPROTO         This error  indicates  that  a  communication
                    problem has been detected between XTI and the
                    transport provider  for  which  there  is  no
                    other suitable XTI error (terrno).


     TSYSER        A system error has occurred during  execution
                    of this function.


TLI COMPATIBILITY
     The XTI and TLI interface definitions have common names  but
     use different header files. This, and other semantic differ-
     ences between the two interfaces are described in  the  sub-
     sections below.

  Interface Header
     The XTI interfaces use the header file,  xti.h.  TLI  inter-
     faces  should  not  use  this  header.   They should use the
     header:
       #include 

  Error Description Values




SunOS 5.11           Last change: 7 May 1998                    4






Networking Services Library Functions                 tsnd(3NSL)



     The terrno values that can be set by the XTI interface  and
     cannot be set by the TLI interface are:
       TPROTO
       TLOK
       TBADFLAG
       TOUTSTATE


     The terrno values that this routine can return  under  dif-
     ferent circumstances than its XTI counterpart are:
       TBADATA


     In the TBADATA error cases  described  above,  TBADATA  is
     returned,  only  for  illegal  zero  byte TSDU ( ETSDU) send
     attempts.

ATRIBUTES
     See attributes(5)  for descriptions of the following  attri-
     butes:



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     MT Level                     Safe                        
    


SEE ALSO
     fcntl(2),   tgetinfo(3NSL),   tlook(3NSL),   topen(3NSL),
     trcv(3NSL), attributes(5)

WARNINGS
     It is important to  remember  that  the  transport  provider
     treats  all  users of a transport endpoint as a single user.
     Therefore if  several  processes  issue  concurrent  tsnd()
     calls then the different data may be intermixed.


     Multiple sends which exceed the maximum TSDU or  ETSDU  size
     may   not   be   discovered   by   XTI.   In  this  case  an
     implementation-dependent error will result, generated by the
     transport  provider, perhaps on a subsequent XTI call.  This
     error may take the form of a connection abort, a TSYSER,  a
     TBADATA or a TPROTO error.


     If multiple sends which exceed the  maximum  TSDU  or  ETSDU
     size are detected by XTI, tsnd() fails with TBADATA.




SunOS 5.11           Last change: 7 May 1998                    5



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™