diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,8 @@
+### 1.4.0
+
+- Added a number of opaque pointers to Nginx global objects for using them in
+  C plugins.
+
 ### 1.3.0
 
 - Export function *ngxExportInstallSignalHandler* to ignore SIGINT.
diff --git a/NgxExport.hs b/NgxExport.hs
--- a/NgxExport.hs
+++ b/NgxExport.hs
@@ -39,6 +39,10 @@
                  ,ngxExportAsyncHandler
                  ,ngxExportAsyncHandlerOnReqBody
                  ,ngxExportServiceHook
+    -- * Opaque pointers to Nginx global objects
+                 ,ngxCyclePtr
+                 ,ngxUpstreamMainConfPtr
+                 ,ngxCachedTimePtr
     -- * Re-exported data constructors from /"Foreign.C"/
     --   (for marshalling in foreign calls)
                  ,Foreign.C.CInt (..)
@@ -51,6 +55,8 @@
 import           Foreign.Storable
 import           Foreign.Marshal.Alloc
 import           Foreign.Marshal.Utils
+import           Data.IORef
+import           System.IO.Unsafe
 import           System.IO.Error
 import           System.Posix.IO
 import           System.Posix.Types
@@ -568,19 +574,25 @@
                         then writeFlag8b
                         else writeFlag1b >> closeChannel
     ) >>= newStablePtr
-    where writeBufN n s = void $
+    where writeBufN n s =
               iterateUntilM (>= n)
               (\w -> (w +) <$>
                   fdWriteBuf fd (plusPtr s $ fromIntegral w) (n - w)
                   `catchIOError`
                   (\e -> return $ if isEINTR e
                                       then 0
-                                      else n
+                                      else n + 1
                   )
-              ) 0
+              ) 0 >>= \w -> when (w > n) cleanupOnWriteError
           writeFlag1b = B.unsafeUseAsCString asyncIOFlag1b $ writeBufN 1
           writeFlag8b = B.unsafeUseAsCString asyncIOFlag8b $ writeBufN 8
           closeChannel = closeFd fd `catchIOError` const (return ())
+          -- FIXME: cleanupOnWriteError should free contents of p, spd,
+          -- and spct. However, leaving this not implemented seems to be safe
+          -- because Nginx won't close the event channel or delete the request
+          -- object (for request-driven handlers) regardless of the Haskell
+          -- handler's duration.
+          cleanupOnWriteError = return ()
 
 asyncIOYY :: IOYY -> CString -> CInt ->
     CInt -> CInt -> Ptr CUInt -> CUInt -> CUInt ->
@@ -769,4 +781,43 @@
 ngxExportVersion x (I n) = fromIntegral <$>
     foldM (\k (I v) -> pokeElemOff x k v >> return (k + 1)) 0
         (take n $ versionBranch version)
+
+-- | Returns an opaque pointer to the Nginx cycle object
+-- for using it in C plugins.
+ngxCyclePtr :: IO (Ptr ())
+ngxCyclePtr = readIORef ngxCyclePtrStore
+
+-- | Returns an opaque pointer to the Nginx upstream main configuration
+-- for using it in C plugins.
+ngxUpstreamMainConfPtr :: IO (Ptr ())
+ngxUpstreamMainConfPtr = readIORef ngxUpstreamMainConfPtrStore
+
+-- | Returns an opaque pointer to the Nginx cached time object
+-- for using it in C plugins.
+ngxCachedTimePtr :: IO (Ptr ())
+ngxCachedTimePtr = readIORef ngxCachedTimePtrStore
+
+foreign export ccall ngxExportSetCyclePtr :: Ptr () -> IO ()
+ngxExportSetCyclePtr :: Ptr () -> IO ()
+ngxExportSetCyclePtr = writeIORef ngxCyclePtrStore
+
+foreign export ccall ngxExportSetUpstreamMainConfPtr :: Ptr () -> IO ()
+ngxExportSetUpstreamMainConfPtr :: Ptr () -> IO ()
+ngxExportSetUpstreamMainConfPtr = writeIORef ngxUpstreamMainConfPtrStore
+
+foreign export ccall ngxExportSetCachedTimePtr :: Ptr () -> IO ()
+ngxExportSetCachedTimePtr :: Ptr () -> IO ()
+ngxExportSetCachedTimePtr = writeIORef ngxCachedTimePtrStore
+
+ngxCyclePtrStore :: IORef (Ptr ())
+ngxCyclePtrStore = unsafePerformIO $ newIORef nullPtr
+{-# NOINLINE ngxCyclePtrStore #-}
+
+ngxUpstreamMainConfPtrStore :: IORef (Ptr ())
+ngxUpstreamMainConfPtrStore = unsafePerformIO $ newIORef nullPtr
+{-# NOINLINE ngxUpstreamMainConfPtrStore #-}
+
+ngxCachedTimePtrStore :: IORef (Ptr ())
+ngxCachedTimePtrStore = unsafePerformIO $ newIORef nullPtr
+{-# NOINLINE ngxCachedTimePtrStore #-}
 
diff --git a/ngx-export.cabal b/ngx-export.cabal
--- a/ngx-export.cabal
+++ b/ngx-export.cabal
@@ -1,5 +1,5 @@
 name:                       ngx-export
-version:                    1.3.0
+version:                    1.4.0
 synopsis:                   Helper module for Nginx haskell module
 description:                Helper module for
         <http://github.com/lyokha/nginx-haskell-module Nginx haskell module>
