A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
socket.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2006 Georgia Tech Research Corporation
4  * 2007 INRIA
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Authors: George F. Riley<riley@ece.gatech.edu>
20  * Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
21  */
22 
23 #ifndef NS3_SOCKET_H
24 #define NS3_SOCKET_H
25 
26 #include "ns3/callback.h"
27 #include "ns3/ptr.h"
28 #include "ns3/tag.h"
29 #include "ns3/object.h"
30 #include "ns3/net-device.h"
31 #include "address.h"
32 #include <stdint.h>
33 #include "ns3/inet-socket-address.h"
34 #include "ns3/inet6-socket-address.h"
35 
36 namespace ns3 {
37 
38 
39 class Node;
40 class Packet;
41 
66 class Socket : public Object
67 {
68 public:
73  static TypeId GetTypeId (void);
74 
75  Socket (void);
76  virtual ~Socket (void);
77 
82  enum SocketErrno {
98  };
99 
104  enum SocketType {
109  };
110 
123  {
126  };
127 
137  static Ptr<Socket> CreateSocket (Ptr<Node> node, TypeId tid);
145  virtual enum Socket::SocketErrno GetErrno (void) const = 0;
149  virtual enum Socket::SocketType GetSocketType (void) const = 0;
154  virtual Ptr<Node> GetNode (void) const = 0;
167  void SetConnectCallback (Callback<void, Ptr<Socket> > connectionSucceeded,
168  Callback<void, Ptr<Socket> > connectionFailed);
184  void SetCloseCallbacks (Callback<void, Ptr<Socket> > normalClose,
185  Callback<void, Ptr<Socket> > errorClose);
204  const Address &> connectionRequest,
205  Callback<void, Ptr<Socket>,
206  const Address&> newConnectionCreated);
215  uint32_t> dataSent);
230  void SetSendCallback (Callback<void, Ptr<Socket>, uint32_t> sendCb);
238  void SetRecvCallback (Callback<void, Ptr<Socket> >);
244  virtual int Bind (const Address &address) = 0;
245 
251  virtual int Bind () = 0;
252 
258  virtual int Bind6 () = 0;
259 
267  virtual int Close (void) = 0;
268 
275  virtual int ShutdownSend (void) = 0;
276 
283  virtual int ShutdownRecv (void) = 0;
284 
290  virtual int Connect (const Address &address) = 0;
291 
296  virtual int Listen (void) = 0;
297 
310  virtual uint32_t GetTxAvailable (void) const = 0;
311 
357  virtual int Send (Ptr<Packet> p, uint32_t flags) = 0;
358 
372  virtual int SendTo (Ptr<Packet> p, uint32_t flags,
373  const Address &toAddress) = 0;
374 
383  virtual uint32_t GetRxAvailable (void) const = 0;
384 
436  virtual Ptr<Packet> Recv (uint32_t maxSize, uint32_t flags) = 0;
437 
457  virtual Ptr<Packet> RecvFrom (uint32_t maxSize, uint32_t flags,
458  Address &fromAddress) = 0;
459 
461  // The remainder of these public methods are overloaded methods //
462  // or variants of Send() and Recv(), and they are non-virtual //
464 
474  int Send (Ptr<Packet> p);
475 
490  int Send (const uint8_t* buf, uint32_t size, uint32_t flags);
491 
492 
509  int SendTo (const uint8_t* buf, uint32_t size, uint32_t flags,
510  const Address &address);
511 
521  Ptr<Packet> Recv (void);
522 
537  int Recv (uint8_t* buf, uint32_t size, uint32_t flags);
538 
552  Ptr<Packet> RecvFrom (Address &fromAddress);
553 
571  int RecvFrom (uint8_t* buf, uint32_t size, uint32_t flags,
572  Address &fromAddress);
578  virtual int GetSockName (Address &address) const = 0;
579 
585  virtual int GetPeerName (Address &address) const = 0;
586 
609  virtual void BindToNetDevice (Ptr<NetDevice> netdevice);
610 
621 
622 
634  virtual bool SetAllowBroadcast (bool allowBroadcast) = 0;
635 
644  virtual bool GetAllowBroadcast () const = 0;
645 
658  void SetRecvPktInfo (bool flag);
659 
665  bool IsRecvPktInfo () const;
666 
678  void SetIpTos (uint8_t ipTos);
679 
688  uint8_t GetIpTos (void) const;
689 
701  void SetIpRecvTos (bool ipv4RecvTos);
702 
711  bool IsIpRecvTos (void) const;
712 
723  void SetIpv6Tclass (int ipTclass);
724 
733  uint8_t GetIpv6Tclass (void) const;
734 
746  void SetIpv6RecvTclass (bool ipv6RecvTclass);
747 
756  bool IsIpv6RecvTclass (void) const;
757 
766  virtual void SetIpTtl (uint8_t ipTtl);
767 
776  virtual uint8_t GetIpTtl (void) const;
777 
789  void SetIpRecvTtl (bool ipv4RecvTtl);
790 
799  bool IsIpRecvTtl (void) const;
800 
809  virtual void SetIpv6HopLimit (uint8_t ipHopLimit);
810 
819  virtual uint8_t GetIpv6HopLimit (void) const;
820 
832  void SetIpv6RecvHopLimit (bool ipv6RecvHopLimit);
833 
842  bool IsIpv6RecvHopLimit (void) const;
843 
857  virtual void Ipv6JoinGroup (Ipv6Address address, Ipv6MulticastFilterMode filterMode, std::vector<Ipv6Address> sourceAddresses);
858 
866  virtual void Ipv6JoinGroup (Ipv6Address address);
867 
871  virtual void Ipv6LeaveGroup (void);
872 
873 protected:
878  void NotifyConnectionSucceeded (void);
879 
884  void NotifyConnectionFailed (void);
885 
890  void NotifyNormalClose (void);
891 
896  void NotifyErrorClose (void);
897 
909  bool NotifyConnectionRequest (const Address &from);
910 
915  void NotifyNewConnectionCreated (Ptr<Socket> socket, const Address &from);
916 
922  void NotifyDataSent (uint32_t size);
923 
929  void NotifySend (uint32_t spaceAvailable);
930 
934  void NotifyDataRecv (void);
935 
936  // inherited function, no doc necessary
937  virtual void DoDispose (void);
938 
944  bool IsManualIpTos (void) const;
945 
951  bool IsManualIpv6Tclass (void) const;
952 
958  bool IsManualIpTtl (void) const;
959 
965  bool IsManualIpv6HopLimit (void) const;
966 
970 
971 private:
981 
982  //IPv4 options
985  bool m_ipRecvTos;
986  bool m_ipRecvTtl;
987 
988  uint8_t m_ipTos;
989  uint8_t m_ipTtl;
990 
991  //IPv6 options
996 
997  uint8_t m_ipv6Tclass;
998  uint8_t m_ipv6HopLimit;
999 };
1000 
1005 class SocketIpTtlTag : public Tag
1006 {
1007 public:
1008  SocketIpTtlTag ();
1009 
1015  void SetTtl (uint8_t ttl);
1016 
1022  uint8_t GetTtl (void) const;
1023 
1028  static TypeId GetTypeId (void);
1029 
1030  // inherited function, no need to doc.
1031  virtual TypeId GetInstanceTypeId (void) const;
1032 
1033  // inherited function, no need to doc.
1034  virtual uint32_t GetSerializedSize (void) const;
1035 
1036  // inherited function, no need to doc.
1037  virtual void Serialize (TagBuffer i) const;
1038 
1039  // inherited function, no need to doc.
1040  virtual void Deserialize (TagBuffer i);
1041 
1042  // inherited function, no need to doc.
1043  virtual void Print (std::ostream &os) const;
1044 
1045 private:
1046  uint8_t m_ttl;
1047 };
1048 
1054 {
1055 public:
1057 
1063  void SetHopLimit (uint8_t hopLimit);
1064 
1070  uint8_t GetHopLimit (void) const;
1071 
1076  static TypeId GetTypeId (void);
1077 
1078  // inherited function, no need to doc.
1079  virtual TypeId GetInstanceTypeId (void) const;
1080 
1081  // inherited function, no need to doc.
1082  virtual uint32_t GetSerializedSize (void) const;
1083 
1084  // inherited function, no need to doc.
1085  virtual void Serialize (TagBuffer i) const;
1086 
1087  // inherited function, no need to doc.
1088  virtual void Deserialize (TagBuffer i);
1089 
1090  // inherited function, no need to doc.
1091  virtual void Print (std::ostream &os) const;
1092 
1093 private:
1094  uint8_t m_hopLimit;
1095 };
1096 
1102 {
1103 public:
1105 
1109  void Enable (void);
1110 
1114  void Disable (void);
1115 
1121  bool IsEnabled (void) const;
1122 
1127  static TypeId GetTypeId (void);
1128 
1129  // inherited function, no need to doc.
1130  virtual TypeId GetInstanceTypeId (void) const;
1131 
1132  // inherited function, no need to doc.
1133  virtual uint32_t GetSerializedSize (void) const;
1134 
1135  // inherited function, no need to doc.
1136  virtual void Serialize (TagBuffer i) const;
1137 
1138  // inherited function, no need to doc.
1139  virtual void Deserialize (TagBuffer i);
1140 
1141  // inherited function, no need to doc.
1142  virtual void Print (std::ostream &os) const;
1143 private:
1145 };
1146 
1151 class SocketIpTosTag : public Tag
1152 {
1153 public:
1154  SocketIpTosTag ();
1155 
1161  void SetTos (uint8_t tos);
1162 
1168  uint8_t GetTos (void) const;
1169 
1174  static TypeId GetTypeId (void);
1175 
1176  // inherited function, no need to doc.
1177  virtual TypeId GetInstanceTypeId (void) const;
1178 
1179  // inherited function, no need to doc.
1180  virtual uint32_t GetSerializedSize (void) const;
1181 
1182  // inherited function, no need to doc.
1183  virtual void Serialize (TagBuffer i) const;
1184 
1185  // inherited function, no need to doc.
1186  virtual void Deserialize (TagBuffer i);
1187 
1188  // inherited function, no need to doc.
1189  virtual void Print (std::ostream &os) const;
1190 private:
1191  uint8_t m_ipTos;
1192 };
1193 
1198 class SocketIpv6TclassTag : public Tag
1199 {
1200 public:
1202 
1208  void SetTclass (uint8_t tclass);
1209 
1215  uint8_t GetTclass (void) const;
1216 
1221  static TypeId GetTypeId (void);
1222 
1223  // inherited function, no need to doc.
1224  virtual TypeId GetInstanceTypeId (void) const;
1225 
1226  // inherited function, no need to doc.
1227  virtual uint32_t GetSerializedSize (void) const;
1228 
1229  // inherited function, no need to doc.
1230  virtual void Serialize (TagBuffer i) const;
1231 
1232  // inherited function, no need to doc.
1233  virtual void Deserialize (TagBuffer i);
1234 
1235  // inherited function, no need to doc.
1236  virtual void Print (std::ostream &os) const;
1237 private:
1238  uint8_t m_ipv6Tclass;
1239 };
1240 
1241 } // namespace ns3
1242 
1243 #endif /* NS3_SOCKET_H */
uint8_t m_ipv6HopLimit
the socket IPv6 Hop Limit
Definition: socket.h:998
static TypeId GetTypeId(void)
Get the type ID.
Definition: socket.cc:571
void SetTclass(uint8_t tclass)
Set the tag's Tclass.
Definition: socket.cc:793
virtual void Serialize(TagBuffer i) const
Definition: socket.cc:828
bool IsManualIpTtl(void) const
Checks if the socket has a specific IPv4 TTL set.
Definition: socket.cc:383
virtual void Print(std::ostream &os) const
Definition: socket.cc:839
virtual void Print(std::ostream &os) const
Definition: socket.cc:605
bool IsIpv6RecvHopLimit(void) const
Ask if the socket is currently passing information about IPv6 Hop Limit up the stack.
Definition: socket.cc:508
bool m_manualIpv6HopLimit
socket has IPv6 Hop Limit set
Definition: socket.h:993
virtual uint8_t GetIpTtl(void) const
Query the value of IP Time to Live field of this socket.
Definition: socket.cc:471
Callback template class.
Definition: callback.h:1176
void SetIpv6RecvTclass(bool ipv6RecvTclass)
Tells a socket to pass information about IPv6 Traffic Class up the stack.
Definition: socket.cc:452
uint8_t GetIpTos(void) const
Query the value of IP Type of Service of this socket.
Definition: socket.cc:404
This class implements a tag that carries the socket-specific HOPLIMIT of a packet to the IPv6 layer...
Definition: socket.h:1053
virtual int Bind6()=0
Allocate a local IPv6 endpoint for this socket.
virtual bool SetAllowBroadcast(bool allowBroadcast)=0
Configure whether broadcast datagram transmissions are allowed.
uint8_t m_hopLimit
the Hop Limit carried by the tag
Definition: socket.h:1094
void NotifyDataRecv(void)
Notify through the callback (if set) that some data have been received.
Definition: socket.cc:305
uint8_t GetTos(void) const
Get the tag's TOS.
Definition: socket.cc:742
virtual uint32_t GetSerializedSize(void) const
Definition: socket.cc:706
virtual int ShutdownSend(void)=0
Ptr< Packet > Recv(void)
Read a single packet from the socket.
Definition: socket.cc:175
bool m_dontFragment
DF bit value for outgoing packets.
Definition: socket.h:1144
Socket(void)
Definition: socket.cc:45
virtual void Ipv6JoinGroup(Ipv6Address address, Ipv6MulticastFilterMode filterMode, std::vector< Ipv6Address > sourceAddresses)
Joins a IPv6 multicast group.
Definition: socket.cc:514
void NotifyConnectionFailed(void)
Notify through the callback (if set) that the connection has not been established due to an error...
Definition: socket.cc:227
static TypeId GetTypeId(void)
Get the type ID.
Definition: socket.cc:692
Callback< bool, Ptr< Socket >, const Address & > m_connectionRequest
connection request callback
Definition: socket.h:976
virtual void Deserialize(TagBuffer i)
Definition: socket.cc:834
virtual int GetSockName(Address &address) const =0
Get socket address.
virtual int ShutdownRecv(void)=0
void SetIpRecvTos(bool ipv4RecvTos)
Tells a socket to pass information about IP Type of Service up the stack.
Definition: socket.cc:410
static TypeId GetTypeId(void)
Get the type ID.
Definition: socket.cc:805
bool IsManualIpTos(void) const
Checks if the socket has a specific IPv4 ToS set.
Definition: socket.cc:371
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: socket.cc:759
void SetCloseCallbacks(Callback< void, Ptr< Socket > > normalClose, Callback< void, Ptr< Socket > > errorClose)
Detect socket recv() events such as graceful shutdown or error.
Definition: socket.cc:94
virtual uint8_t GetIpv6HopLimit(void) const
Query the value of IP Hop Limit field of this socket.
Definition: socket.cc:496
Callback< void, Ptr< Socket > > m_connectionSucceeded
connection succeeded callback
Definition: socket.h:972
void SetTos(uint8_t tos)
Set the tag's TOS.
Definition: socket.cc:736
bool m_recvPktInfo
if the socket should add packet info tags to the packet forwarded to L4.
Definition: socket.h:968
bool IsEnabled(void) const
Checks if the DF (Don't Fragment) flag is set.
Definition: socket.cc:683
virtual void Serialize(TagBuffer i) const
Definition: socket.cc:712
This class implements a tag that carries the socket-specific TTL of a packet to the IP layer...
Definition: socket.h:1005
SocketErrno
Enumeration of the possible errors returned by a socket.
Definition: socket.h:82
bool NotifyConnectionRequest(const Address &from)
Notify through the callback (if set) that an incoming connection is being requested by a remote host...
Definition: socket.cc:257
Ipv6Address m_ipv6MulticastGroupAddress
IPv6 multicast group address.
Definition: socket.h:969
bool m_ipRecvTos
socket forwards IPv4 TOS tag to L4
Definition: socket.h:985
bool IsRecvPktInfo() const
Get status indicating whether enable/disable packet information to socket.
Definition: socket.cc:364
uint8_t m_ipv6Tclass
the socket IPv6 Tclass
Definition: socket.h:997
virtual enum Socket::SocketErrno GetErrno(void) const =0
Get last error number.
a polymophic address class
Definition: address.h:90
virtual int Listen(void)=0
Listen for incoming connections.
bool IsIpRecvTos(void) const
Ask if the socket is currently passing information about IP Type of Service up the stack...
Definition: socket.cc:416
void SetRecvPktInfo(bool flag)
Enable/Disable receive packet information to socket.
Definition: socket.cc:358
Ptr< NetDevice > GetBoundNetDevice()
Returns socket's bound netdevice, if any.
Definition: socket.cc:351
A low-level Socket API based loosely on the BSD Socket API.
Definition: socket.h:66
Ipv6MulticastFilterMode
Enumeration of the possible filter of a socket.
Definition: socket.h:122
uint8_t GetTclass(void) const
Get the tag's Tclass.
Definition: socket.cc:799
void SetTtl(uint8_t ttl)
Set the tag's TTL.
Definition: socket.cc:555
uint8_t m_ipTos
the socket IPv4 TOS
Definition: socket.h:988
virtual int Bind()=0
Allocate a local IPv4 endpoint for this socket.
Callback< void, Ptr< Socket > > m_receivedData
data received callback
Definition: socket.h:980
Callback< void, Ptr< Socket >, const Address & > m_newConnectionCreated
connection created callback
Definition: socket.h:977
static TypeId GetTypeId(void)
Get the type ID.
Definition: socket.cc:748
Callback< void, Ptr< Socket > > m_connectionFailed
connection failed callback
Definition: socket.h:973
virtual bool GetAllowBroadcast() const =0
Query whether broadcast datagram transmissions are allowed.
bool IsManualIpv6Tclass(void) const
Checks if the socket has a specific IPv6 Tclass set.
Definition: socket.cc:377
void NotifyDataSent(uint32_t size)
Notify through the callback (if set) that some data have been sent.
Definition: socket.cc:285
virtual ~Socket(void)
Definition: socket.cc:65
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read.
Definition: socket.cc:128
static Ptr< Socket > CreateSocket(Ptr< Node > node, TypeId tid)
This method wraps the creation of sockets that is performed on a given node by a SocketFactory specif...
Definition: socket.cc:71
virtual void Print(std::ostream &os) const
Definition: socket.cc:724
virtual enum Socket::SocketType GetSocketType(void) const =0
void SetHopLimit(uint8_t hopLimit)
Set the tag's Hop Limit.
Definition: socket.cc:616
uint8_t m_ipTos
the TOS carried by the tag
Definition: socket.h:1191
bool m_manualIpTos
socket has IPv4 TOS set
Definition: socket.h:983
void NotifyConnectionSucceeded(void)
Notify through the callback (if set) that the connection has been established.
Definition: socket.cc:217
Callback< void, Ptr< Socket > > m_errorClose
connection closed due to errors callback
Definition: socket.h:975
virtual int Connect(const Address &address)=0
Initiate a connection to a remote host.
Callback< void, Ptr< Socket >, uint32_t > m_dataSent
data sent callback
Definition: socket.h:978
bool IsManualIpv6HopLimit(void) const
Checks if the socket has a specific IPv6 Hop Limit set.
Definition: socket.cc:389
virtual uint32_t GetSerializedSize(void) const
Definition: socket.cc:587
void NotifyNormalClose(void)
Notify through the callback (if set) that the connection has been closed.
Definition: socket.cc:237
tag a set of bytes in a packet
Definition: tag.h:36
uint8_t m_ipTtl
the socket IPv4 TTL
Definition: socket.h:989
void SetIpv6Tclass(int ipTclass)
Manually set IPv6 Traffic Class field.
Definition: socket.cc:422
virtual void Serialize(TagBuffer i) const
Definition: socket.cc:651
void NotifyNewConnectionCreated(Ptr< Socket > socket, const Address &from)
Notify through the callback (if set) that a new connection has been created.
Definition: socket.cc:275
virtual uint32_t GetSerializedSize(void) const
Definition: socket.cc:646
indicates whether the socket has IPV6_TCLASS set.
Definition: socket.h:1198
uint8_t GetIpv6Tclass(void) const
Query the value of IPv6 Traffic Class field of this socket.
Definition: socket.cc:446
virtual void Ipv6LeaveGroup(void)
Leaves IPv6 multicast group this socket is joined to.
Definition: socket.cc:531
static TypeId GetTypeId(void)
Get the type ID.
Definition: socket.cc:37
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: socket.cc:816
virtual void Deserialize(TagBuffer i)
Definition: socket.cc:718
bool IsIpv6RecvTclass(void) const
Ask if the socket is currently passing information about IPv6 Traffic Class up the stack...
Definition: socket.cc:458
uint8_t m_ttl
the ttl carried by the tag
Definition: socket.h:1046
void SetSendCallback(Callback< void, Ptr< Socket >, uint32_t > sendCb)
Notify application when space in transmit buffer is added.
Definition: socket.cc:121
bool m_ipRecvTtl
socket forwards IPv4 TTL tag to L4
Definition: socket.h:986
void SetAcceptCallback(Callback< bool, Ptr< Socket >, const Address & > connectionRequest, Callback< void, Ptr< Socket >, const Address & > newConnectionCreated)
Accept connection requests from remote hosts.
Definition: socket.cc:104
virtual void BindToNetDevice(Ptr< NetDevice > netdevice)
Bind a socket to specific device.
Definition: socket.cc:330
void SetDataSentCallback(Callback< void, Ptr< Socket >, uint32_t > dataSent)
Notify application when a packet has been sent from transport protocol (non-standard socket call) ...
Definition: socket.cc:114
virtual void DoDispose(void)
Destructor implementation.
Definition: socket.cc:315
bool IsIpRecvTtl(void) const
Ask if the socket is currently passing information about IP_TTL up the stack.
Definition: socket.cc:483
static TypeId GetTypeId(void)
Get the type ID.
Definition: socket.cc:630
uint8_t GetHopLimit(void) const
Get the tag's Hop Limit.
Definition: socket.cc:622
void Disable(void)
Disables the DF (Don't Fragment) flag.
Definition: socket.cc:677
Describes an IPv6 address.
Definition: ipv6-address.h:48
read and write tag data
Definition: tag-buffer.h:51
Ptr< NetDevice > m_boundnetdevice
the device this socket is bound to (might be null).
Definition: socket.h:967
void SetIpv6RecvHopLimit(bool ipv6RecvHopLimit)
Tells a socket to pass information about IPv6 Hop Limit up the stack.
Definition: socket.cc:502
Callback< void, Ptr< Socket > > m_normalClose
connection closed callback
Definition: socket.h:974
virtual uint32_t GetSerializedSize(void) const
Definition: socket.cc:822
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: socket.cc:581
virtual void Serialize(TagBuffer i) const
Definition: socket.cc:771
virtual Ptr< Node > GetNode(void) const =0
Return the node this socket is associated with.
virtual void Print(std::ostream &os) const
Definition: socket.cc:782
virtual void Deserialize(TagBuffer i)
Definition: socket.cc:656
indicates whether packets should be sent out with the DF (Don't Fragment) flag set.
Definition: socket.h:1101
virtual void Serialize(TagBuffer i) const
Definition: socket.cc:593
void SetIpRecvTtl(bool ipv4RecvTtl)
Tells a socket to pass information about IP_TTL up the stack.
Definition: socket.cc:477
void Enable(void)
Enables the DF (Don't Fragment) flag.
Definition: socket.cc:671
uint8_t m_ipv6Tclass
the Tclass carried by the tag
Definition: socket.h:1238
virtual void Deserialize(TagBuffer i)
Definition: socket.cc:599
virtual int SendTo(Ptr< Packet > p, uint32_t flags, const Address &toAddress)=0
Send data to a specified peer.
virtual void Deserialize(TagBuffer i)
Definition: socket.cc:777
virtual void Print(std::ostream &os) const
Definition: socket.cc:661
virtual int GetPeerName(Address &address) const =0
Get the peer address of a connected socket.
void SetConnectCallback(Callback< void, Ptr< Socket > > connectionSucceeded, Callback< void, Ptr< Socket > > connectionFailed)
Specify callbacks to allow the caller to determine if the connection succeeds of fails.
Definition: socket.cc:84
A base class which provides memory management and object aggregation.
Definition: object.h:87
tuple address
Definition: first.py:37
virtual Ptr< Packet > RecvFrom(uint32_t maxSize, uint32_t flags, Address &fromAddress)=0
Read a single packet from the socket and retrieve the sender address.
uint8_t GetTtl(void) const
Get the tag's TTL.
Definition: socket.cc:562
Callback< void, Ptr< Socket >, uint32_t > m_sendCb
packet sent callback
Definition: socket.h:979
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: socket.cc:701
virtual void SetIpv6HopLimit(uint8_t ipHopLimit)
Manually set IPv6 Hop Limit.
Definition: socket.cc:489
virtual int Close(void)=0
Close a socket.
virtual uint32_t GetTxAvailable(void) const =0
Returns the number of bytes which can be sent in a single call to Send.
virtual uint32_t GetSerializedSize(void) const
Definition: socket.cc:765
indicates whether the socket has IP_TOS set.
Definition: socket.h:1151
SocketType
Enumeration of the possible socket types.
Definition: socket.h:104
void SetIpTos(uint8_t ipTos)
Manually set IP Type of Service field.
Definition: socket.cc:395
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
Definition: socket.cc:640
a unique identifier for an interface.
Definition: type-id.h:58
void NotifySend(uint32_t spaceAvailable)
Notify through the callback (if set) that some data have been sent.
Definition: socket.cc:295
bool m_manualIpTtl
socket has IPv4 TTL set
Definition: socket.h:984
void NotifyErrorClose(void)
Notify through the callback (if set) that the connection has been closed due to an error...
Definition: socket.cc:247
virtual void SetIpTtl(uint8_t ipTtl)
Manually set IP Time to Live field.
Definition: socket.cc:464
bool m_ipv6RecvHopLimit
socket forwards IPv6 Hop Limit tag to L4
Definition: socket.h:995
virtual uint32_t GetRxAvailable(void) const =0
Return number of bytes which can be returned from one or multiple calls to Recv.
bool m_manualIpv6Tclass
socket has IPv6 Tclass set
Definition: socket.h:992
bool m_ipv6RecvTclass
socket forwards IPv6 Tclass tag to L4
Definition: socket.h:994