### -*-pyrex-*- ### ### Messing with file descriptors ### ### (c) 2007 Straylight/Edgeware ### ###----- Licensing notice --------------------------------------------------- ### ### This file is part of the Python interface to mLib. ### ### mLib/Python is free software; you can redistribute it and/or modify ### it under the terms of the GNU General Public License as published by ### the Free Software Foundation; either version 2 of the License, or ### (at your option) any later version. ### ### mLib/Python is distributed in the hope that it will be useful, ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### along with mLib/Python; if not, write to the Free Software Foundation, ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. def fdflags(file, unsigned fbic = 0, unsigned fxor = 0, unsigned fdbic = 0, unsigned fdxor = 0): """ fdflags(FILE, [fbic = 0], [fxor = 0], [fdbic = 0], [fdxor = 0]) Set fcntl(2) file and descriptor flags. If these are FL and FD, then update: * FL = (FL & ~FBIC) ^ FXOR * FD = (FD & ~FDBIC) ^ FDXOR FILE may be integer file descriptor or an object with `fileno' method. """ cdef int rc rc = _fdflags(_getfd(file), fbic, fxor, fdbic, fdxor) if rc < 0: _oserror() return rc def fdsend(sock, file, buffer): """ fdsend(SOCK, FILE, BUFFER) -> RC: send FILE over Unix-domain socket SOCK, along with BUFFER """ cdef void *p cdef Py_ssize_t len cdef int rc PyObject_AsReadBuffer(buffer, &p, &len) rc = fdpass_send(_getfd(sock), _getfd(file), p, len) if rc < 0: _oserror() return rc def fdrecv(sock, unsigned size): """ fdrecv(SOCK, SIZE) -> FD, BUFFER receive file FD and BUFFER of length up to SIZE from Unix-domain SOCK """ cdef void *p cdef buf cdef Py_ssize_t len cdef PyObject *obj cdef int fd buf = PyString_FromStringAndSize(NULL, size) p = PyString_AS_STRING(buf) len = fdpass_recv(_getfd(sock), &fd, p, size) if len < 0: _oserror() obj = buf _PyString_Resize(&obj, len) return fd, obj ###----- That's all, folks --------------------------------------------------