or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

core-greenlets.mdindex.mdmonkey-patching.mdnetworking.mdpooling.mdqueues.mdservers.mdsynchronization.mdtimeouts.md

networking.mddocs/

0

# Networking

1

2

Complete networking stack with cooperative sockets, SSL support, and gevent-aware I/O operations. All network operations work seamlessly with greenlets, yielding control during I/O to enable high concurrency.

3

4

## Capabilities

5

6

### Socket Operations

7

8

Cooperative socket interface that mirrors Python's standard socket API.

9

10

```python { .api }

11

def create_connection(address, timeout=None, source_address=None) -> socket:

12

"""

13

Create a socket connection to address.

14

15

Parameters:

16

- address: tuple (host, port) or string path for Unix sockets

17

- timeout: float, connection timeout in seconds

18

- source_address: tuple, source address to bind to

19

20

Returns:

21

Connected socket object

22

"""

23

24

class socket:

25

"""

26

Cooperative socket that yields during I/O operations.

27

"""

28

29

def __init__(self, family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None):

30

"""

31

Create a socket.

32

33

Parameters:

34

- family: int, address family (AF_INET, AF_INET6, AF_UNIX)

35

- type: int, socket type (SOCK_STREAM, SOCK_DGRAM)

36

- proto: int, protocol number

37

- fileno: int, existing file descriptor

38

"""

39

40

def connect(self, address):

41

"""

42

Connect to address.

43

44

Parameters:

45

- address: tuple (host, port) or string path

46

47

Returns:

48

None

49

"""

50

51

def bind(self, address):

52

"""

53

Bind socket to address.

54

55

Parameters:

56

- address: tuple (host, port) or string path

57

58

Returns:

59

None

60

"""

61

62

def listen(self, backlog=None):

63

"""

64

Listen for connections.

65

66

Parameters:

67

- backlog: int, maximum number of pending connections

68

69

Returns:

70

None

71

"""

72

73

def accept(self) -> tuple[socket, tuple]:

74

"""

75

Accept a connection.

76

77

Returns:

78

tuple of (socket, address) for new connection

79

"""

80

81

def recv(self, bufsize, flags=0) -> bytes:

82

"""

83

Receive data from socket.

84

85

Parameters:

86

- bufsize: int, maximum bytes to receive

87

- flags: int, optional flags

88

89

Returns:

90

bytes received

91

"""

92

93

def send(self, data, flags=0) -> int:

94

"""

95

Send data on socket.

96

97

Parameters:

98

- data: bytes, data to send

99

- flags: int, optional flags

100

101

Returns:

102

int, number of bytes sent

103

"""

104

105

def sendall(self, data, flags=0):

106

"""

107

Send all data on socket.

108

109

Parameters:

110

- data: bytes, data to send

111

- flags: int, optional flags

112

113

Returns:

114

None

115

"""

116

117

def close(self):

118

"""

119

Close the socket.

120

121

Returns:

122

None

123

"""

124

125

def wait_read(self, timeout=None):

126

"""

127

Wait for socket to become readable.

128

129

Parameters:

130

- timeout: float, maximum time to wait

131

132

Returns:

133

None

134

"""

135

136

def wait_write(self, timeout=None):

137

"""

138

Wait for socket to become writable.

139

140

Parameters:

141

- timeout: float, maximum time to wait

142

143

Returns:

144

None

145

"""

146

```

147

148

### DNS Resolution

149

150

Cooperative DNS resolution functions.

151

152

```python { .api }

153

def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):

154

"""

155

Get address info for host and port.

156

157

Parameters:

158

- host: str, hostname or IP address

159

- port: int or str, port number or service name

160

- family: int, address family filter

161

- type: int, socket type filter

162

- proto: int, protocol filter

163

- flags: int, optional flags

164

165

Returns:

166

list of (family, type, proto, canonname, sockaddr) tuples

167

"""

168

169

def gethostbyname(hostname) -> str:

170

"""

171

Get IP address for hostname.

172

173

Parameters:

174

- hostname: str, hostname to resolve

175

176

Returns:

177

str, IP address

178

"""

179

180

def gethostbyaddr(ip_address) -> tuple:

181

"""

182

Get hostname for IP address.

183

184

Parameters:

185

- ip_address: str, IP address to reverse lookup

186

187

Returns:

188

tuple of (hostname, aliaslist, ipaddrlist)

189

"""

190

```

191

192

### SSL Support

193

194

Secure socket layer support for encrypted connections.

195

196

```python { .api }

197

class SSLSocket:

198

"""

199

SSL-wrapped socket for encrypted communication.

200

"""

201

202

def read(self, len=1024) -> bytes:

203

"""

204

Read data from SSL socket.

205

206

Parameters:

207

- len: int, maximum bytes to read

208

209

Returns:

210

bytes received

211

"""

212

213

def write(self, data) -> int:

214

"""

215

Write data to SSL socket.

216

217

Parameters:

218

- data: bytes, data to write

219

220

Returns:

221

int, number of bytes written

222

"""

223

224

def do_handshake(self):

225

"""

226

Perform SSL handshake.

227

228

Returns:

229

None

230

"""

231

232

def unwrap(self) -> socket:

233

"""

234

Unwrap SSL socket to plain socket.

235

236

Returns:

237

Plain socket object

238

"""

239

240

def wrap_socket(sock, keyfile=None, certfile=None, server_side=False, cert_reqs=CERT_NONE, ssl_version=PROTOCOL_TLS, ca_certs=None, do_handshake_on_connect=True, suppress_ragged_eofs=True, ciphers=None) -> SSLSocket:

241

"""

242

Wrap socket with SSL.

243

244

Parameters:

245

- sock: socket object to wrap

246

- keyfile: str, path to private key file

247

- certfile: str, path to certificate file

248

- server_side: bool, whether this is server side

249

- cert_reqs: int, certificate requirements

250

- ssl_version: int, SSL version to use

251

- ca_certs: str, path to CA certificates

252

- do_handshake_on_connect: bool, perform handshake immediately

253

- suppress_ragged_eofs: bool, suppress SSL EOF errors

254

- ciphers: str, cipher suite specification

255

256

Returns:

257

SSLSocket object

258

"""

259

260

class SSLContext:

261

"""

262

SSL context for configuring SSL connections.

263

"""

264

265

def wrap_socket(self, sock, server_side=False, do_handshake_on_connect=True, suppress_ragged_eofs=True, server_hostname=None) -> SSLSocket:

266

"""

267

Wrap socket with this SSL context.

268

269

Parameters:

270

- sock: socket to wrap

271

- server_side: bool, server mode

272

- do_handshake_on_connect: bool, immediate handshake

273

- suppress_ragged_eofs: bool, suppress EOF errors

274

- server_hostname: str, expected server hostname

275

276

Returns:

277

SSLSocket object

278

"""

279

```

280

281

### File Objects

282

283

File-like objects for socket I/O.

284

285

```python { .api }

286

class FileObject:

287

"""

288

File-like object wrapper for sockets.

289

"""

290

291

def read(self, size=-1) -> bytes:

292

"""

293

Read data from file object.

294

295

Parameters:

296

- size: int, bytes to read (-1 for all)

297

298

Returns:

299

bytes read

300

"""

301

302

def readline(self, size=-1) -> bytes:

303

"""

304

Read one line from file object.

305

306

Parameters:

307

- size: int, maximum bytes to read

308

309

Returns:

310

bytes for one line

311

"""

312

313

def write(self, data) -> int:

314

"""

315

Write data to file object.

316

317

Parameters:

318

- data: bytes, data to write

319

320

Returns:

321

int, bytes written

322

"""

323

324

def flush(self):

325

"""

326

Flush write buffers.

327

328

Returns:

329

None

330

"""

331

332

def close(self):

333

"""

334

Close file object.

335

336

Returns:

337

None

338

"""

339

```

340

341

## Usage Examples

342

343

### TCP Client

344

345

```python

346

import gevent

347

from gevent import socket

348

349

def tcp_client():

350

# Create and connect socket

351

sock = socket.socket()

352

sock.connect(('example.com', 80))

353

354

# Send HTTP request

355

request = b'GET / HTTP/1.0\r\nHost: example.com\r\n\r\n'

356

sock.sendall(request)

357

358

# Receive response

359

response = b''

360

while True:

361

data = sock.recv(4096)

362

if not data:

363

break

364

response += data

365

366

sock.close()

367

return response

368

369

response = tcp_client()

370

print(response[:200]) # Print first 200 bytes

371

```

372

373

### TCP Server

374

375

```python

376

import gevent

377

from gevent import socket

378

379

def echo_server():

380

server = socket.socket()

381

server.bind(('localhost', 8080))

382

server.listen(1000)

383

384

print("Echo server listening on port 8080")

385

386

while True:

387

conn, addr = server.accept()

388

gevent.spawn(handle_client, conn, addr)

389

390

def handle_client(conn, addr):

391

print(f"Connection from {addr}")

392

try:

393

while True:

394

data = conn.recv(1024)

395

if not data:

396

break

397

conn.sendall(data) # Echo back

398

except Exception as e:

399

print(f"Error handling client {addr}: {e}")

400

finally:

401

conn.close()

402

403

# Start server

404

echo_server()

405

```

406

407

### HTTPS Client

408

409

```python

410

import gevent

411

from gevent import socket, ssl

412

413

def https_client():

414

# Create SSL context

415

context = ssl.create_default_context()

416

417

# Create socket and wrap with SSL

418

sock = socket.socket()

419

ssl_sock = context.wrap_socket(sock, server_hostname='httpbin.org')

420

421

# Connect and send request

422

ssl_sock.connect(('httpbin.org', 443))

423

request = b'GET /get HTTP/1.1\r\nHost: httpbin.org\r\n\r\n'

424

ssl_sock.sendall(request)

425

426

# Read response

427

response = ssl_sock.recv(4096)

428

ssl_sock.close()

429

430

return response

431

432

response = https_client()

433

print(response.decode())

434

```