Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(ARM).Porting TCP-IP programmer's guide.Ver 1.6.pdf
Скачиваний:
43
Добавлен:
23.08.2013
Размер:
2.64 Mб
Скачать

Sockets

5.2.11t_send() and t_sendto()

These functions are used to transmit a message.

Syntax

int t_send(int s, char *msg, int len, int flags)

int t_sendto(int s, char *msg, int len, int flags,

 

struct sockaddr *to)

where:

 

s

Is a socket descriptor created with t_socket().

msg

Is a pointer to the data to be sent.

len

Is the number of bytes to be sent.

flags

Are flags that control how the data is to be sent (see below).

to

Is the destination to which the data is to be sent.

Return value

Returns one of the following:

number

The number of bytes received, if successful.

–1

If not successful. The internal socket variable errno is set to one of the

 

errors listed in ipport.h. The value of errno can be retrieved by a call

 

to t_errno(socket).

Usage

You can only use the t_send() function when the socket is in a connected state. The t_sendto() function can be used at any time.

The flags parameter is formed from the bitwise OR of zero or more of the following:

MSG_OOB

Sends out-of-band data. Only SOCK_STREAM sockets support

 

out-of-band data.

MSG_DONTROUTE

The SO_DONTROUTE option is turned on for the duration of the

 

operation. It is used only by diagnostic or routing programs.

If the socket does not have enough buffer space available to hold the message being sent, the t_send() functions block, unless the socket has been placed in nonblocking input/output mode (see t_setsockopt() on page 5-19).

5-18

Copyright © 1998-2001 ARM Limited. All rights reserved.

ARM DUI 0144B

Sockets

5.2.12t_setsockopt()

This function sets the options associated with a socket.

Syntax

int t_setsockopt(long socket, int optname, char *optval)

where:

socket Is the identifier of the socket to be changed.

optname Is the name of the option to be set.

optval Is the value the option will be set to. The parameter should be nonzero to enable a boolean option, or zero if the option is to be disabled. Most socket-level options take an int parameter for optval.

Return value

Returns one of the following:

0

If successful.

–1

If not successful. The internal socket variable errno is set to one of the

 

errors listed in ipport.h. The value of errno can be retrieved by a call

 

to t_errno(socket).

Options

The following options are available:

SO_BIO

This sets the socket to blocking mode. Operations on the socket

 

are blocked until completion.

SO_BROADCAST

This boolean value requests permission to send broadcast

 

datagrams on the socket. Broadcast was a privileged operation in

 

earlier versions of the system.

SO_CALLBACK

This registers a callback function for use with the TCP Zero-Copy

 

API. See Chapter 7 The TCP Zero-copy API for more information.

SO_DONTROUTE

This boolean value indicates that outgoing messages must bypass

 

the standard routing facilities. Instead, messages are directed to

 

the appropriate network interface according to the network

 

portion of the destination address.

ARM DUI 0144B

Copyright © 1998-2001 ARM Limited. All rights reserved.

5-19

Sockets

SO_KEEPALIVE

This boolean value enables the periodic transmission of messages

 

on a connected socket. If the connected party fails to respond to

 

these messages, the connection is considered broken.

SO_LINGER

This option controls the action taken when unsent messages are

 

queued on socket and a t_socketclose() is performed.

 

If the socket promises reliable delivery of data and SO_LINGER is

 

set, the system blocks the process on the t_socketclose()

 

attempt until it is able to transmit the data or until it decides it is

 

unable to deliver the information (a timeout period, termed the

 

linger interval, is specified in the t_setsockopt() call when

 

SO_LINGER is requested).

 

If SO_LINGER is disabled and a t_socketclose() is issued, the

 

system will process the close in a manner that allows the process

 

to continue as quickly as possible.

 

SO_LINGER uses a pointer to a struct linger parameter,

 

defined in socket.h, that specifies the desired state of the option

 

and the linger interval.

SO_NBIO

This sets the socket to nonblocking mode. If further operations on

 

the socket cannot complete immediately, they return –1 and set the

 

socket errno variable to EWOULDBLOCK.

SO_NOBLOCK

This boolean value enables or disables blocking mode on the

 

socket. If optval is set to zero, the socket is in blocking mode. If

 

optval is set to a nonzero value, the socket is in nonblocking

 

mode.

SO_OOBINLINE With protocols that support out-of-band data, this boolean option requests that out-of-band data be placed in the normal data input queue as received. It will then be accessible with t_recv().

SO_REUSEADDR This boolean value indicates that the rules used in validating addresses supplied in a t_bind() call must allow reuse of local addresses.

SO_SNDBUF, SO_RCVBUF

These are options to adjust the normal buffer sizes allocated for output and input buffers, respectively. The buffer size can be increased for high-volume connections or can be decreased to limit the possible backlog of incoming data. The system places an absolute limit of 16KB on these values.

5-20

Copyright © 1998-2001 ARM Limited. All rights reserved.

ARM DUI 0144B

Sockets

5.2.13t_shutdown()

This function causes all or part of a full duplex connection on the socket associated with socket to be shut down.

Syntax

int t_shutdown(long socket, int how)

where:

 

 

socket

Is the connection to be shut down.

how

Is the method of shut down, specified as follows:

 

0

Further receives are disallowed

 

1

Further sends are disallowed

 

2

Further sends and receives are disallowed.

Return value

Returns one of the following:

0

If successful.

–1

If not successful. The internal socket variable, errno, is set to one of the

 

errors listed in ipport.h. The value of errno can be retrieved by a call

 

to t_errno(socket).

ARM DUI 0144B

Copyright © 1998-2001 ARM Limited. All rights reserved.

5-21